Django模板渲染空白响应:如何正确传递列表数据?
Django模板渲染post列表返回空白的修复方案
问题场景
尝试在Django模板中渲染指定post列表的名称,但页面返回空白响应。最初使用的代码如下:
最初的views.py代码
from django.shortcuts import render post = [ { 'name':'Abc, # 注意:此处缺少闭合单引号,存在语法错误 'dob':'01/01/1998' }, { 'name':'Xyz', 'dob':'24/01/1993' } ] def home(requests): return render(requests,'app1/home.html',dict(post))
最初的home.html代码
{% for item in post %} <p>name is {{ item.name }}</p> {% endfor %}
错误原因
- 上下文传递方式错误:Django的
render函数要求第三个参数是键值对形式的上下文字典,键对应模板中要引用的变量名,值是对应的数据。直接使用dict(post)会把列表中的字典元素错误转换为字典的键值对,导致模板无法获取到名为post的变量。 - 语法错误:原
post列表的第一个字典中,'name':'Abc,缺少闭合单引号,会触发Python语法错误(后续修改中已修复)。
修复后的代码
通过构建正确的上下文字典传递数据后,页面可正常渲染内容:
修改后的views.py代码
from django.shortcuts import render post = [ { 'name':'Abc', 'dob':'01/01/1998' }, { 'name':'Xyz', 'dob':'24/01/1993' } ] def home(requests): context = { 'posts': post } return render(requests,'app1/home.html',context)
修改后的home.html代码
{% for item in posts %} <p>name is {{ item.name }}</p> {% endfor %}
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

