2013-11-27 5 views
12

मैं अपने पायथन फ़ाइल के माध्यम से अपने जिन्जा टेम्पलेट में 3 सूचियां पास कर रहा हूं।आप एक जिंजा टेम्पलेट पर कैसे इंडेक्स करते हैं?

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

इन सभी मूल्यों eachother के साथ अनुरूप है, तो 'एक' और 5, 'बी' और 6 के साथ 2, आदि

मेरे टेम्पलेट में साथ 1 मैचों मैं एक ही पर उन्हें बाहर मुद्रण कर रहा हूँ लाइन। मैं उन्हें मुद्रित करने के लिए संख्यात्मक अनुक्रमण कैसे कर सकता हूं? वैसे ही

1 a 5 
2 b 6 
3 c 7 

केवल एक चीज मैं जानता हूँ कि सीधे

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

उपयोग '{मैं के लिए%, आइटम की गणना (एल)%}' –

+1

दृश्य में, आप 'जिप (List1, List2, सूची 3) कर सकते हैं' और फिर पाश: उदाहरण के लिए उनके माध्यम से – karthikr

+1

@GrijeshChauhan मुझे नहीं लगता कि आप जिना 2 में गणना कर सकते हैं। मुझे त्रुटियां मिल रही हैं कि इसे – 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

यदि आप वास्तव में इंडेक्स चाहते हैं, तो आप केवल एक चर पर लूप कर सकते हैं और फिर जिन्जा की loop.index0 सुविधा का उपयोग कर सकते हैं (0 (loop.index पर शुरू होने वाले लूप की वर्तमान अनुक्रमणिका लौटाती है हिंग 1 से शुरू करके)

उदाहरण के लिए:

{% for item in list1 %} 

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

{% endfor %} 

इसका मतलब यह है अपनी सूची सभी टेम्पलेट सेट करने से पहले एक ही लंबाई होने की बात पर जोर दिया जाता है, या आप समस्याओं का सामना करेंगे।

1

@ सेन वीइरा के उत्तर के समान, आप अपने कोड में डेटा ज़िप कर सकते हैं, फिर इसे टेम्पलेट में इंडेक्स कर सकते हैं।

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> 
संबंधित मुद्दे