2013-11-27 19 views
12

benim piton dosyası üzerinden benim jinja şablonuna 3 listeleri geçiyordum.Bir jinja şablonunu nasıl endekslersiniz?

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

Bütün bu değerler birbirleri ile aynı olduğundan, vb benim şablonunda

'a' ve 5 'b' ve 6 ile 2, 1 maç aynı onları dışarı yazdırdığımı hat. Yazdırma için sayısal indeksleme nasıl yapılır? gibi öylesine

1 a 5 
2 b 6 
3 c 7 

doğrudan

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

kullanımı '{i için,% et numaralandırmak (I)%} görünümünde' –

+1

, sen '' zip (listesi 1, Listesi 2, list3) yapmak ve daha sonra döngü: Örneğin Aralarında – karthikr

+1

@GrijeshChauhan jina2'de numaralandırabileceğinizi sanmıyorum. i '{, i için numaralandırmak (l)% öğeyi%}' olurdu ben, sözdizimi için de Alanı'nda 'kayıp corected edilir yorumladı kod bernie2436 – bernie2436

cevap

6

İki yollar gibi döngü içinde nesne erişen bildiğim tek şey: basitçe zip Jinja çağırır Kodunuzda

  1. senin listeleri:

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

    Ardından, şablonda yapabilirsiniz basitçe iç içe satırların üzerine döngü: bir alternatif olarak

    {# your_template.jinja #} 
    <table> 
    {% for row in data %} 
        <tr> 
        {% for cell in row %} 
         <td>{{ cell }}</td> 
        {% endfor %} 
        </tr> 
    {% endfor %} 
    </table> 
    
  2. , sadece Jinja kullanmak istiyorsanız loop variable özel kullanabilirsiniz:

    <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

gerçekten endeksi istiyorsanız, değişkenlerden biri üzerinde sadece döngü ve sonra Jinja en loop.index0 özelliğini (kullanır 0'dan başlayarak döngü geçerli dizini döndürür olabilir (loop.index aynı t yapar

{% for item in list1 %} 

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

{% endfor %} 

Bu listeler tüm şablon ayarlamadan önce aynı uzunlukta olması yönünde değerlendirmeler yapılmaktadır varsayar veya sorun karşılaşırsınız: hing Örneğin

) 1 den başlayarak. @Sean Vieira cevaba benzer

1

, şablonda ardından endeks onu, kodunuzda verileri sıkıştırabilirsiniz.

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> 
İlgili konular