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>
2 ответа:
вы можете избежать копирования в новый дикт, отключив функцию по умолчанию defaultdict как только вы закончите вводить новые значения:
new_data.default_factory = None
объяснение
The шаблон переменного алгоритма разрешения в Django попытается решить
new_data.items
какnew_data['items']
во-первых, который разрешает пустой список при использовании defaultdict (list).чтобы отключить дефолт в пустой список и иметь Джанго не на
new_data['items']
затем продолжайте попытки разрешения до вызоваnew_data.items()
на default_factory атрибут defaultdict может быть задан нет.