.items 不适用于 Django 模板中的 defaultdict

2024-01-06

我无法让 .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 }}

output:

**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 的第二个版本不起作用?


这是一个Django 中的已知问题 https://code.djangoproject.com/ticket/16335:你不能迭代defaultdict在模板中。文档建议最好的方法来处理这个 https://docs.djangoproject.com/en/dev/ref/templates/language/#variables是要转换你的defaultdict to a dict在将其传递给模板之前:

context['data'] = dict(assertion_dict)

顺便说一下,它不起作用的原因是当你打电话时{{ data.items }}在你的模板中,Django 将首先尝试查找data['items'], 进而data.items. The defaultdict将为前者返回一个默认值,因此 Django 不会尝试后者,并且您最终会尝试循环默认值而不是字典。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.items 不适用于 Django 模板中的 defaultdict 的相关文章

随机推荐