Django DetailView视图无法正常显示模型内容问题求助
问题原因
DetailView无法渲染对应内容的核心原因是详情页模板使用的上下文变量名和Django类视图默认传递的变量名不匹配。页面无报错是因为Django模板遇到不存在的变量时默认渲染为空值,不会抛出异常。
Django 未手动指定context_object_name的DetailView,会将查询到的单条模型实例存入两个固定上下文变量传给模板:
- 通用变量名
object - 与模型类名全小写对应的变量:你的模型类名为
Post_Model,对应默认变量名为post_model
你在详情页模板中直接使用Post作为变量名取数据,但Post是ListView模板中for循环定义的临时局部变量,不会传递到详情页,因此取不到对应内容。
修复方案
二选一即可:
方案1:修改详情页模板变量(无需改视图代码)
将详情页模板中的变量替换为视图默认传递的变量名即可,两种写法均有效:
写法1,使用通用object变量:
<h1>Article Page</h1><br> {{ object.Title }} {{ object.Author }} {{ object.Body }}
写法2,使用模型对应的默认小写变量名:
<h1>Article Page</h1><br> {{ post_model.Title }} {{ post_model.Author }} {{ post_model.Body }}
方案2:自定义视图上下文变量名(推荐,可读性更好)
在DetailView类中添加context_object_name属性,指定你想在模板中使用的变量名,无需修改原有详情页模板代码。
修改Views.py中的Article_details类:
class Article_details(DetailView): model = Post_Model template_name = 'June11App/Article.html' # 自定义传给模板的模型实例变量名为Post context_object_name = 'Post'
额外排查点
检查你的urls.py代码,urlpatterns列表末尾缺少闭合的方括号],该语法问题会导致项目启动报错,记得补全:
urlpatterns = [ path('', Home_page.as_view(), name="Home"), path('Article/<int:pk>/', Article_details.as_view(), name="Article"), ] # 补全闭合方括号
内容的提问来源于stack exchange,提问作者Sizwe
相关产品推荐
相关产品推荐

