Пересечение нескольких списков в django обрабатывает по шаблону в том же для цикла

Я хочу пересечь несколько списков в шаблоне django в том же для цикла. Как я делаю это?

некоторые взгляды связывают это:

{% for item1, item2, item3 in list1, list2 list3 %}

{{ item1 }}, {{ item2 }}, {{ item3 }}

{% endfor %}

Действительно ли что-то вроде этого возможно?

11
задан J. Ghyllebert 28 November 2013 в 10:08
поделиться

2 ответа

У вас есть два варианта:

1. Вы определяете свои объекты так, чтобы вы могли получить доступ к таким элементам, как параметры

for x in list:
    {{x.item1}}, {{x.item2}}, {{x.item3}}

Обратите внимание, что вы должны составить список, объединив три списка:

lst = [{'item1': t[0], 'item2': t[1], 'item3':t[2]} for t in zip(list_a, list_b, list_c)]

2. Вы определяете свой собственный фильтр

from django import template

register = template.Library()

@register.filter(name='list_iter')
def list_iter(lists):
    list_a, list_b, list_c = lists

    for x, y, z in zip(list_a, list_b, list_c):
        yield (x, y, z)

# test the filter
for x in list_iter((list_a, list_b, list_c)):
    print x

См. Документацию по фильтру

22
ответ дан 3 December 2019 в 03:03
поделиться

Злоупотребление шаблонами django:

{% for x in list_a %}
{% with forloop.counter|cut:" " as index %}
  {{ x }},
  {{ list_b|slice:index|last }},
  {{ list_c|slice:index|last }} <br/>
{% endwith %}
{% endfor %}

Но НИКОГДА этого не делайте !!! просто используйте zip в ваших представлениях.

6
ответ дан 3 December 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: