Django模板无法循环defaultdi

2024-04-25 17:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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>

Tags: innewfordatafirstnamejohnh1collections
2条回答

尝试:

dict(new_data)

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

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

new_data.default_factory = None

说明

template variable resolution algorithm in Django将尝试首先将new_data.items解析为new_data['items'],当使用defaultdict(list)时,它将解析为空列表。

若要禁用对空列表的默认设置并使Django在new_data['items']上失败,然后继续解析尝试,直到调用new_data.items(),可以将default_factory attribute of defaultdict设置为None

相关问题 更多 >

    热门问题