2013-07-22 10 views
12

के लिए नई पंक्ति बनाएं वर्तमान में लेखों में प्रत्येक लेख के लिए कक्षा span4 के साथ एक नया div बनाया गया है। इसके बजाय प्रत्येक पंक्ति के लिए मैं अपनी सामग्री को तीन अवधि तक सीमित करना चाहता हूं और उस सीमा तक पहुंचने के बाद एक नई पंक्ति तैयार करना चाहता हूं। मैं इसे सबसे अच्छा कैसे कार्यान्वित कर सकता हूं?Jinja2: प्रत्येक 3 आइटम

{% extends "base.html" %} 
{% block content %} 
<div class="container-fluid"> 
    <legend></legend> 
    <div class="row-fluid" id="main"> 
     {% for article in articles %} 
     <div class="span4"> 
      <div class="thumbnail"> 
       <a href="{{ article.url }}"><img src="http://placehold.it/300x150/483CB4"></a> 
       <div class="caption"> 
        <h4><a href="{{ article.url }}">{{ article.title }}</a></h4> 
        <p> {{ article.summary }}</p> 
       </div> 
       <legend></legend> 
       <a class="btn" href="#"><i class="icon-thumbs-up"></i></a> 
       <a class="btn" href="#"><i class="icon-thumbs-down"></i></a> 
      </div> 
     </div> 
     {% endfor %} 
    </div> 
</div> 
{% endblock %} 

लक्ष्य:

<div class="row"> 
    <div class="span4">article[0]</div> 
    <div class="span4">article[1]</div> 
    <div class="span4">article[2]</div> 
</div> 
<div class="row"> 
    <div class="span4">article[3]</div> 
    <div class="span4">article[4]</div> 
    <div class="span4">article[5]</div> 
</div> 

उत्तर

19

यह करने के लिए सबसे अच्छा तरीका है batch filter में बनाया का उपयोग करने के तीन के समूह में अपनी सूची को तोड़ने के लिए है:

{% for article_row in articles | batch(3, '&nbsp;') %} 
<div class="row"> 
    {% for article in article_row %} 
    <div class="span4">{{ article }}</div> 
    {% endfor %} 
</div> 
{% endfor %} 
+1

वास्तव में क्या मैं के लिए देख रहा था। मैं सभी Jinja2 के दस्तावेज के माध्यम से बेहतर पढ़ा। धन्यवाद। – cryptojuice

+0

हाय, बढ़िया समाधान, अगर मैं पहली पंक्ति में 3 तत्वों के रूप में दिखाना चाहता हूं, दूसरी पंक्ति में 4elements, फिर तीसरी पंक्ति में 3 तत्व, 4 वें पंक्ति में 4 तत्व वैकल्पिक रूप से। –

+0

फिर आपको फ़िल्टर के अपने संस्करण की आवश्यकता होगी - लिखना मुश्किल नहीं है, लेकिन इस टिप्पणी का मार्जिन कोड को रखने के लिए बहुत छोटा है। अब तक आपके पास एक और सवाल लिखें। :-) –

4

आप for पाश अंदर loop.index0 और loop.last उपयोग कर सकते हैं। यहां for-loop documentation है।

उदाहरण:

{% extends "base.html" %} 
{% block content %} 
<div class="container-fluid"> 
    <legend></legend> 
    <div class="row-fluid" id="main"> 
     {% for article in articles %} 
     {% if loop.index0 % 3 == 0 %} 
     <div class="row"> 
     {% endif %} 
      <div class="span4"> 
       ... 
      </div> 
     {% if loop.index0 % 3 == 2 or loop.last %} 
     </div> 
     {% endif %} 
     {% endfor %} 
    </div> 
</div> 
{% endblock %} 

loop.last खंड अंतिम पंक्ति भले ही कम से कम 3 आइटम थे बंद हो जाना चाहिए। <div> शुरू कर देना चाहिए जब loop.index0 शेष के रूप में 0 देता है और अंदर से एक के लिए-लूप जब 2 शेष

एक अन्य विकल्प समूह के लिए होगा उन्हें टेम्पलेट में पार करने से पहले पंक्तियों में आइटम है, तो आप सिर्फ दो जारी कर सकते हैं है खत्म होना चाहिए अन्य।

संबंधित मुद्दे