Django模板无法循环defaultdict

import collections

data = [

{'firstname': 'John', 'lastname': 'Smith'},

{'firstname': 'Samantha', 'lastname': 'Smith'},

{'firstname': 'shawn', 'lastname': 'Spencer'},

]

new_data = collections.defaultdict(list)

for d in data:

new_data[d['lastname']].append(d['firstname'])

print new_data

这是输出:

defaultdict(<type 'list'>, {'Smith': ['John', 'Samantha'], 'Spencer': ['shawn']})

这是模板:

{% for lastname, firstname in data.items %}

<h1> {{ lastname }} </h1>

<p> {{ firstname|join:", " }} </p>

{% endfor %}

但是模板中的循环不起作用。什么都没有出现。它甚至没有给我一个错误。我怎样才能解决这个问题?应该显示姓氏和名字,像这样:

<h1> Smith </h1>

<p> John, Samantha </p>

<h1> Spencer </h1>

<p> shawn </p>

回答:

完成插入新值后,可以通过禁用defaultdict的默认功能来避免复制到新dict :

new_data.default_factory = None

说明

将在Django模板变量解析算法将尝试解析new_data.itemsnew_data['items']第一,使用时其解析为一个空列表defaultdict(列表)。

要禁用默认列表为空列表并让Django失败,new_data['items']然后继续尝试解析直到调用new_data.items(),可以将defaultdict的default_factory属性设置为None。

以上是 Django模板无法循环defaultdict 的全部内容, 来源链接: utcz.com/qa/399988.html

回到顶部