【发布时间】:2015-12-25 03:14:18
【问题描述】:
我无法让 .items 在我的 Django 模板中工作:
从我的 CBV 的 get_context_data 复制并粘贴:
context['data'] = assertion_dict
context['dataitems'] = assertion_dict.items()
return context
从我的模板复制和粘贴:
<h3>data dump</h3>
{{data}}
<h3>dataitems</h3>
{% for key, value in dataitems %}
{{ key }}: {{ value }} <br/>
{% endfor %}
<h3>data.items</h3>
{% for key, value in data.items %}
{{ key }}: {{ value }} <br/>
{% endfor %}
<h3>Not found test</h3>
{{ i_dont_exist }}
输出:
**data dump**
defaultdict(<class 'list'>, {<BadgeType: Talent>: [<BadgeAssertion: Blender Blue Belt>], <BadgeType: Achievement>: [<BadgeAssertion: MyBadge#1>, <BadgeAssertion: MyBadge#1>, <BadgeAssertion: MyBadge#2>], <BadgeType: Award>: [<BadgeAssertion: Copy of Copy of Blenbade>]})
**dataitems**
Talent: [<BadgeAssertion: Blender Blue Belt>]
Achievement: [<BadgeAssertion: MyBadge#1>, <BadgeAssertion: MyBadge#1>, <BadgeAssertion: MyBadge#2>]
Award: [<BadgeAssertion: Copy of Copy of Blenbade>]
**data.items**
**Not found test**
DEBUG WARNING: undefined template variable [i_dont_exist] not found
为什么我在模板中使用 data.items 的第二个版本不起作用?
【问题讨论】:
-
您的第一个示例模板没有明显的问题。检查拼写错误或意外重新分配
context['data']或删除assertion_dict中的项目。 -
为了排除拼写错误和其他问题,我同时在上下文中发送了两者,并复制/粘贴了视图、模板和生成的 HTML 输出。使用此信息更新问题。
-
我会 a) 在模板的某处添加
{{ data }}转储 - Python dicts 以合理的方式进行字符串化,这应该有助于验证您的data变量是否包含您期望的内容 - b) 临时设置您的TEMPLATE_STRING_IF_INVALID设置,如下所述:stackoverflow.com/a/8990344/2337736 -
添加
{{data}}dump -
添加了 string_if_invalid
标签: python django dictionary django-templates