2013-02-12 10 views
11

मेरे पास समान लंबाई की दो सूची वस्तुएं हैं जिनके साथ पूरक डेटा मैं प्रस्तुत करना चाहता हूं, दोनों एक ही समय में दोनों को प्रस्तुत करने का एक तरीका है।django में एक साथ दो सूचियों पर लूप करने का कोई तरीका है?

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

या कुछ ऐसा ही है?

उत्तर

24

यदि दोनों सूचियां एक ही लंबाई के हैं, तो आप अपने दृश्य में टेम्पलेट संदर्भ के रूप में zipped_data = zip(table, total) वापस कर सकते हैं, जो 2-मूल्यवान tuples की एक सूची उत्पन्न करता है।

उदाहरण:

>>> 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 %} 

इसके अलावा, for टेम्पलेट टैग here के बारे में Django के प्रलेखन पर एक नज़र डालें। यह उन सभी संभावनाओं का उल्लेख करता है जो आपके पास इसका उपयोग करने के लिए अच्छे उदाहरण शामिल हैं।

+0

यह सवाल अपेक्षाकृत आसान लग रहा था, या बल्कि डम। लेकिन उत्तर देने वाले हर किसी के लिए धन्यवाद! – mike

+2

@ माइक आप गूंगा नहीं हैं। कुछ समय पहले हम सभी इस समय पाइथन और डीजेगो के बारे में सीखते थे। और Django के दस्तावेज़ों में पाइथन के 'ज़िप' फ़ंक्शन का उल्लेख नहीं है, इसलिए यह सवाल निश्चित रूप से उपयोगी था। मुझे खुशी है कि मैं आपकी मदद कर सकता हूं। :) – pemistahl

2

तो यह सिर्फ है चर 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 %} 

+0

एक dict करने के लिए एक सूची से परिवर्तित और उस पर छाँटे गए कॉल की संभावना डेटा की छंटाई क्रम बदल जाएगा। – Jordan

+0

अच्छी बात, मैंने बस ज़िप को फिर से चलाने के लिए अपना जवाब अपडेट कर दिया है। –

1

एक शब्दकोश का उपयोग कर के बजाय (हर किसी ने इस सवाल का जवाब करने के लिए क्रेडिट) (जो किसी भी प्रकार की सॉर्टिंग की गारंटी नहीं देता है), दो सूचियों पर पायथन zip फ़ंक्शन का उपयोग करें और इसे टेम्पलेट पर पास करें।

5

पायथन के ज़िप फ़ंक्शन का उपयोग करें और 2 सूचियों को एक साथ ज़िप करें।

आपके विचार में:

zip(table, list) 

अपने टेम्पलेट में, आप एक सरल सूची की तरह इस पुनरावृति, और क्रमश: तालिका और सूची से डेटा का उपयोग करने .0 और .1 गुणों का उपयोग कर सकते हैं।

1

आपको इसे देखने में करना होगा - tuples की सूची बनाने के लिए बिल्टिन ज़िप फ़ंक्शन का उपयोग करें, फिर टेम्पलेट में इसे फिर से चालू करें।

टेम्पलेट तर्क जानबूझकर सरल है, दृश्य में थोड़ा जटिल भी किया जाना चाहिए।

+0

यह एक महान और तार्किक बिंदु है; का उल्लेख किया। –

0

इस सवाल का किसी भी हाल ही में आगंतुकों के लिए, forloop.parentloop एक साथ दो सूचियों की ज़िप करना नकल कर सकते हैं:

{% for a in list_a %}{% for b in list_b %} 
    {% if forloop.counter == forloop.parentloop.counter %} 
     {{a}} {{b}} 
    {% endif %} 
{% endfor %}{% endfor %} 
संबंधित मुद्दे