Django模型数据未在模板中显示的问题排查求助
解决Django ListView页面无内容但标签存在的问题
嘿,我瞅了下你的代码,问题其实出在模板里的两个小细节上——这就是为啥页面看不到内容,但审查元素能看到h2标签的原因:标签确实生成了,但里面的字段内容没正确渲染出来。
问题分析与修复步骤:
循环变量与上下文变量重名冲突
你在MyDateListView里把上下文变量名设成了mydate,然后模板里又写了{% for mydate in mydate %}。这就相当于在循环块里,把原本指向整个数据列表的mydate,覆盖成了当前迭代的单个条目对象,逻辑上会出现混乱,也容易导致字段引用错误。错误引用模型类而非实例对象
你在h2标签里写的是{{ MyDate.hebrew_date }},这里的MyDate是模型的类名,不是循环里的单个数据实例,自然拿不到具体的字段值。应该用循环变量来引用每个条目的字段。
修改后的模板代码:
{% extends 'luach/base.html' %} {% block content %} <div class="jumbotron"> {% for date_item in mydate %} <h2>Hi {{ date_item.hebrew_date }}</h2> {% empty %} <h2>Sorry, no dates in this list.</h2> {% endfor %} </div> {% endblock %}
可选优化:提升代码可读性
为了彻底避免变量名冲突的问题,你可以把ListView的上下文变量名改成更清晰的复数形式,比如mydate_list:
修改views.py里的MyDateListView:
class MyDateListView(ListView): model = MyDate context_object_name = 'mydate_list'
对应的模板循环部分改成:
{% for date_item in mydate_list %} <h2>Hi {{ date_item.hebrew_date }}</h2> {% endfor %}
最后别忘了确认你的数据库里已经添加了MyDate的条目,如果数据库是空的,页面会显示empty块里的提示内容哦。
内容的提问来源于stack exchange,提问作者Moskovitz
相关产品推荐
相关产品推荐

