Есть ли способ перебрать два списка одновременно в django?

У меня есть два объекта списка одинаковой длины с дополнительными данными, которые я хочу отобразить, есть способ визуализации одновременно, т.е.

{% for i,j in table, total %} 
 {{ i }} 
 {{ j }}
{% endfor %} 

или что-то подобное?

Ответ 1

Если оба списка имеют одинаковую длину, вы можете вернуть zipped_data = zip(table, total) в качестве контекста шаблона в своем представлении, в результате чего вы получите список 2-значных кортежей.

Пример:

>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3]
>>> zip(lst1, lst2)
[('a', 1), ('b', 2), ('c', 3)]

В вашем шаблоне вы можете написать:

{% for i, j in zipped_data %}
    {{ i }}, {{ j }}
{% endfor %}

Кроме того, ознакомьтесь с документацией Django о теге for здесь. В нем упоминаются все возможности, которые у вас есть для использования, включая приятные примеры.

Ответ 2

Используйте функцию zip zip и запишите два списка вместе.

На ваш взгляд:

zip(table, list)

В шаблоне вы можете повторить это как простой список и использовать свойства .0 и .1 для доступа к данным из таблицы и списка соответственно.

Ответ 3

Если это просто переменные i и j, которые вы смотрите, тогда это должно работать -

return render_to_response('results.html',
    {'data': zip(table, list)})

{% for i, j in data %}
    <tr>
        <td> {{ i }}: </td> <td> {{ j }} </td>
    </tr>
{% endfor %}

(кредит всем, кто ответил на этот вопрос)

Ответ 4

Вместо использования словаря (который не гарантирует никакой сортировки), используйте функцию python zip в двух списках и передайте ее в шаблон.

Ответ 5

Вам нужно сделать это в представлении - используйте встроенную zip-функцию, чтобы составить список кортежей, а затем перетащите ее в шаблон.

Логика шаблонов преднамеренно проста, что-то даже слегка сложное должно быть сделано в представлении.

Ответ 6

Для недавних посетителей этого вопроса forloop.parentloop может имитировать скрепление двух списков вместе:

{% for a in list_a %}{% for b in list_b %}
    {% if forloop.counter == forloop.parentloop.counter %}
        {{a}} {{b}}
    {% endif %}
{% endfor %}{% endfor %}