2013-11-27 4 views
12

Я передаю 3 списка в мой шаблон jinja через мой файл python.Как вы индексируете шаблон jinja?

list1 = [1,2,3,4] 
list2 = ['a','b','c','d'] 
list3 = [5,6,7,8] 

Все эти значения соответствуют друг друга, так что 1 матчи с «а» и 5, 2 с «B» и 6, и т.д.

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

1 a 5 
2 b 6 
3 c 7 

Единственное, что я знаю, непосредственно доступ к объекту через петлю, как

{%for item in list%} 
    {{item}} 
+0

использование '{% для I, пункт перечисление (л)%}' –

+1

По мнению, это можно сделать 'почтовый индекс (песни1, песни2, песни3)' и затем петли через них – karthikr

+1

@GrijeshChauhan Я не думаю, что вы можете перечислить в jina2. я получаю ошибки, которые не определены – bernie2436

ответ

6

двумя способами:

  1. В своем коде, который вызывает дзиндзя просто zip ваш списки:

    data = zip(list1, list2, list3) 
    # data is now a list of tuples 
    # [(1, 'a', 5), (2, 'b', 6), etc.] 
    

    Затем, в шаблоне вы можете просто перебирает вложенные строки:

    {# your_template.jinja #} 
    <table> 
    {% for row in data %} 
        <tr> 
        {% for cell in row %} 
         <td>{{ cell }}</td> 
        {% endfor %} 
        </tr> 
    {% endfor %} 
    </table> 
    
  2. В качестве альтернативы, если вы хотите использовать только дзиндзя вы можете использовать специальный loop variable:

    <table> 
    {% for cell in list1 %} 
        <tr> 
         <td>{{ list1[loop.index0] }}</td> 
         <td>{{ list2[loop.index0] }}</td> 
         <td>{{ list3[loop.index0] }}</td> 
        </tr> 
    {% endfor %} 
    </table> 
    
12

Если вам действительно нужен индекс, вы можете просто зациклиться на одной из переменных, а затем использовать функцию Jinja (возвращает текущий индекс цикла, начинающийся с 0 (loop.index делает то же самое t Хин, начиная с 1)

Например:

{% for item in list1 %} 

    {{ item }} 
    {{ list2[loop.index0] }} 
    {{ list3[loop.index0] }} 

{% endfor %} 

Это предполагает, ваши списки все Утверждают, что такой же длины, перед установкой шаблона, или вы будете сталкиваться с проблемами.

1

Как и @Sean Vieira, вы можете заархивировать данные в своем коде, а затем проиндексировать их в шаблоне. Например:

data = zip(list1, list2, list3)

<table> 
<tr> 
     <td>list 1 value</td> 
     <td>list 2 value</td> 
     <td>list 3 value</td>   
<tr> 
{% for row in data %} 
<tr> 
     <td>{{ row[0] }}</td> 
     <td>{{ row[1] }}</td> 
     <td>{{ row[2] }}</td> 
</tr> 
{% endfor %} 
</table> 
Смежные вопросы