python 함수 장고 템플릿에서 두리스트 반복하기




장고 템플릿 태그 (5)

zip을 템플릿 필터 로 정의하기 만하면됩니다.

@register.filter(name='zip')
def zip_lists(a, b):
  return zip(a, b)

그런 다음 템플릿에서

{%for a, b in first_list|zip:second_list %}
  {{a}}
  {{b}}
{%endfor%}

내가 장고 템플릿에서 아래의 목록 반복을하고 싶다 :

foo = ['foo', 'bar'];
moo = ['moo', 'loo'];

for (a, b) in zip(foo, moo):
    print a, b

장고 코드 :

{%for a, b in zip(foo, moo)%}
  {{a}}
  {{b}}
{%endfor%}

나는 이것을 시도 할 때 아래의 오류를 얻는다.

File "/base/python_lib/versions/third_party/django-0.96/django/template/defaulttags.py", line 538, in do_for
    raise TemplateSyntaxError, "'for' statements should have either four or five words: %s" % token.contents

어떻게해야합니까?


보기에서 zip 을 사용할 수 있습니다.

mylist = zip(list1, list2)
return render_to_response('template.html', {'list': list, ... })

및 템플릿 사용

{% for item1, item2 in mylist %}

두 목록을 반복합니다.

이것은 장고의 모든 버전에서 작동합니다.


할 수있다.

{% for ab in mylist %}
    {{ab.0}}
    {{ab.1}}
{% endfor %}

for 구조 내에서 zip 호출 할 수는 없습니다. 먼저 다른 변수에 압축 목록을 저장 한 다음 반복합니다.


서버 측에서 moo 객체의 foo 객체 속성을 만들 수 있습니다.

for f, b in zip(foo, bar):
    f.foosBar = b

context = {
    "foo": foo
}

두 번째 목록이 첫 번째 속성의 속성 일 때 특히 좋습니다 (대개의 경우).

users = User.objects.all()
for user in users:
    user.bestFriend = findBestFriendForUser(user)

context = {
    "users": users
}

이 문제를 해결하기 위해 django-multiforloop 을 만들었습니다. README에서 :

django-multiforloop이 설치된 상태에서이 템플릿을 렌더링합니다.

{% for x in x_list; y in y_list %}
  {{ x }}:{{ y }}
{% endfor %}

이 맥락에서

context = {
    "x_list": ('one', 1, 'carrot'),
    "y_list": ('two', 2, 'orange')
}

출력 할 것이다.

one:two
1:2
carrot:orange






django-templates