2013-11-27 25 views
12

私はpythonファイルを通して私のジンジャーテンプレートに3つのリストを渡しています。ジンジャーテンプレートでどのようにインデックスを作成しますか?

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

すべてのこれらの値は私のテンプレートには「B」と6で「A」と5、2とその1試合など

私は同じでそれらをプリントアウトしています、お互いに対応ライン。 数字でインデックスを作成して印刷するにはどうすればよいですか? よう

1 a 5 
2 b 6 
3 c 7 

私が知っている唯一のことは、直接

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

使用 '{iについての%は、アイテムの列挙(L)%}鑑み' –

+1

は、あなたが ''ジッパー(LIST1、LIST2、LIST3)を行うことができ、その後、ループ:例えばそれらを通って – karthikr

+1

@GrijeshChauhan私はあなたがjina2で列挙できるとは思わない。私はそれが定義されていないエラーを取得しています – bernie2436

答えて

6

二つの方法のようなループを通ってオブジェクトにアクセスしている:神社は、単にzipあなたを呼び出すあなたのコードで

  1. リスト:

    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

本当にインデックスが必要な場合は、変数の1つをループして、Jinjaのloop.index0フィーチャを使用します(0から始まるループの現在のインデックスを返します(loop.index)興、例えば、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> 
関連する問題