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> 

尝试:

 dict(new_data) 

在Python 2中,最好使用iteritems而不是items 🙂

您可以通过在完成插入新值后禁用defaultdict的默认function来避免复制到新的字典:

 new_data.default_factory = None 

说明

Django中的模板variablesparsingalgorithm会尝试将new_data.itemsparsing为new_data['items'] ,这会在使用defaultdict(list)时parsing为空列表。

要将默认值禁用为空列表,并在new_data['items']上使Django失败,请继续parsing尝试,直到调用new_data.items()defaultdict的default_factory属性可以设置为None