Django中类视图实现列表与详情视图跳转问题求助
解决Django类视图ListView跳转DetailView的问题
嘿,我来帮你搞定这个基于类视图的详情页跳转问题!你现在遇到的问题主要集中在URL配置、模板链接以及模板路径这几个地方,咱们一步步调整就能解决:
1. 修正URL配置(核心问题!)
Django 2.0及以后版本的path()语法不需要使用正则表达式,而是用路径转换器来匹配参数。另外,DetailView默认会以pk(主键)作为查询参数,而且你得给详情页URL设置name,这样模板里才能通过{% url %}标签生成链接。
修改你的urls.py:
path('list/', BlogList.as_view(), name='list'), path('<int:pk>/', BlogDetail.as_view(), name='blog-detail'),
小提示:给
list路径末尾加个斜杠是Django的规范用法,避免访问时出现重定向问题。
2. 修复DetailView的模板路径
你的详情页模板放在templates/blog/目录下,但当前BlogDetail里的template_name只写了blogdetail.html,Django会找不到这个模板。需要补全路径:
修改views.py里的BlogDetail类:
class BlogDetail(DetailView): model = BlogPost template_name = 'blog/blogdetail.html' # 可选:如果你想在模板里用自定义的上下文变量名(比如不用默认的object),可以加下面这行 # context_object_name = 'blog_post'
3. 给列表项添加跳转链接
现在你的列表模板只是显示了标题和日期,但没有可点击的入口。需要把标题改成跳转链接,用{% url %}标签生成对应详情页的URL:
修改列表模板bloglist.html:
<div class="post-body"> {% for p in post %} <blockquote> <a href="{% url 'blog-detail' p.pk %}">{{ p.title }}</a></br></br>{{ p.Date }} </blockquote> {% endfor %} </div><!-- end post-body -->
这里的p.pk就是每条博客的主键,会传给URL里的<int:pk>参数,点击标题就能直接跳转到对应的详情页啦!
如果你的模型主键用的是id(其实Django默认主键就是id,pk是它的别名),也可以把URL里的<int:pk>改成<int:id>,然后在BlogDetail里添加pk_url_kwarg = 'id',不过用pk更通用哦。
内容的提问来源于stack exchange,提问作者Sandeep Gupta
相关产品推荐
相关产品推荐

