Development Tip

Django 템플릿은 defaultdict를 반복 할 수 없습니다.

yourdevel 2020. 11. 17. 21:12
반응형

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 의 기본값 기능을 비활성화하여 새 dict에 대한 복사를 피할 수 있습니다 .

new_data.default_factory = None

설명

장고 템플릿 변수 해상도 알고리즘은 해결을 시도 할 것 new_data.items으로 new_data['items']사용할 때 빈 목록에있는 결의 먼저 defaultdict (목록) .

빈 목록에 대한 기본값 설정을 비활성화하고 Django가 실패하도록 new_data['items']한 다음 호출 할 때까지 해결 시도를 계속하려면 defaultdictnew_data.items()default_factory 속성None 으로 설정할 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/4764110/django-template-cant-loop-defaultdict

반응형