Job Search Engine
838 浏览 5 years, 8 months
2.3 详情视图
版权声明: 转载请注明出处 http://www.codingsoho.com/template_name
列表往往不能显示全部的信息,这一节我们来完成DetailView,针对某一条目进行详细展示
继承详情视图
from django.views.generic.detail import DetailView
class JobEntryDetailView(DetailView):
model = JobEntry
增加新的路由
from job_entry.views import JobEntryListView, JobEntryDetailView
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^jobentry/$', JobEntryListView.as_view(), name='job_entry_list'),
url(r'^jobentry/(?P<pk>\d+)/$', JobEntryDetailView.as_view(), name='job_entry_detail'),
]
正则表达式可参考文档Django URL正则表达式
模板
创建新的模板文件jobentry_detail.html,系统相对路径为jobentry/jobentry_detail.html
传递过去的context变量,关于当前对象的变量是object
简单实现代码如下
<table>
<tr>
<th>title</th>
<th>salary</th>
<th>region</th>
<th>degree</th>
<th>experience</th>
<th>company</th>
<th>industry</th>
<th>description</th>
<th>href</th>
<th>created</th>
</tr>
<tr>
<td>{{object.title}}</td>
<td>{{object.salary}}</td>
<td>{{object.region}}</td>
<td>{{object.degree}}</td>
<td>{{object.experience}}</td>
<td>{{object.company}}</td>
<td>{{object.industry}}</td>
<td>{{object.description}}</td>
<td>{{object.href}}</td>
<td>{{object.created}}</td>
</tr>
</table>
访问http://127.0.0.1:8000/jobentry/1/可以显示详情视图
高级路由访问
实际操作中我们不会直接输入指定对象的pk id来访问,往往是通过在列表视图点击超链接调整过去,在django中可以这样实现
方法1 : 通过固定url访问
<td><a href="/jobentry/{{obj.id}}">{{obj.title}}</a> </td>
方法2: 通过url
name
<td><a href="{% url 'job_entry_list' %}{{obj.id}}">{{obj.title}}</a> </td>
使用url功能时,需要先加载下面templatetag
{% load staticfiles %}
方法3: 通过后台函数get_absolute_url
在model里添加函数
from django.core.urlresolvers import reverse
class JobEntry(models.Model):
def get_absolute_url(self):
return reverse("job_entry_detail", kwargs={"pk": self.id})
其中,job_entry_detail
和pk
分别在urls.py中指定了,前者是name
,后者是网址中的参数。这两个地方需要成对修改
url(r'^jobentry/(?P<pk>\d+)/$', JobEntryDetailView.as_view(), name='job_entry_detail'),