Django टेम्पलेट में मापांक%


120

मैं django में मापांक ऑपरेटर की तरह कुछ का उपयोग करने के लिए एक रास्ता खोज रहा हूँ। मैं जो करने की कोशिश कर रहा हूं वह एक लूप में हर चौथे तत्व के लिए एक क्लासनाम जोड़ना है।

मापांक के साथ यह इस तरह दिखेगा:

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0 % 4 == 0 %}first{% endif %}}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}

बेशक यह काम नहीं करता क्योंकि% एक आरक्षित वर्ण है। ऐसा करने के लिए कोई और रास्ता नहीं है?


क्या आपने भी इसे आजमाया? Django प्रदान करता है templatetagटैग, लेकिन वह कवर {%, %}आदि (नहीं %)।
प्लेटिनम एज़्योर

4
हां, मैंने इसकी कोशिश की, लेकिन मुझे निम्न त्रुटि मिलती है: शेष को पार्स नहीं किया जा सका: '%' को '%' से मैं मान लेता हूं क्योंकि यह पता नहीं है कि मॉड्यूल को कैसे रोकना है। ऑपरेटर को डॉक्स dj.djangoproject.com/en/dev/ref/templates/builtins/…
'18:

जवाबों:


210

आपको डिविज़नबी , एक बिल्ट-इन django फ़िल्टर की आवश्यकता है।

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0|divisibleby:4 %}first{% endif %}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}

1
आह हाँ, यह ठीक है। अब चक्र का उपयोग करना, लेकिन भविष्य के संदर्भ के लिए अच्छा है। मैं modulor 100 या कुछ के साथ चक्र का उपयोग नहीं करना चाहूंगा :) वास्तव में मैं इस उत्तर को सही के रूप में चिह्नित करने के लिए जा रहा हूं। क्योंकि यह मॉड्युलोर पर और नहीं एक समाधान केंद्रित है ...
underdoeg

15

आप Django टेम्प्लेट टैग में मापांक ऑपरेटर का उपयोग नहीं कर सकते हैं, लेकिन ऐसा करने के लिए फ़िल्टर लिखना काफी आसान होगा। कुछ इस तरह काम करना चाहिए:

@register.filter
def modulo(num, val):
    return num % val

और तब:

{% ifequal forloop.counter0|modulo:4 0 %}

आप इसके बजाय कुछ ऐसा कर सकते हैं:

@register.filter
def modulo(num, val):
    return num % val == 0

और तब:

{% if forloop.counter0|modulo:4 %}

या आप cycleटैग का उपयोग कर सकते हैं :

<div class="post width1 height2 column {% cycle 'first' '' '' '' %}">


12

बूटस्ट्रैप पंक्तियाँ और स्तंभ उदाहरण। हर 4 आइटम में नई पंक्ति। 4 आइटम से कम होने पर भी अंतिम पंक्ति बंद करें।

MyApp / templatetags / my_tags.py

from django import template

register = template.Library()

@register.filter
def modulo(num, val):
    return num % val

html टेम्पलेट

{% load my_tags %}

{% for item in all_items %} 
    {% if forloop.counter|modulo:4 == 1 %}
        <div class="row">
    {% endif %}

        <div class="col-sm-3">
            {{ item }}
        </div>

    {% if forloop.last or forloop.counter|modulo:4 == 0 %}
        </div>
    {% endif %}

{% endfor %}

2
यह बेहतर उत्तर है क्योंकि यह वर्णन करता है कि आवश्यक निर्देशिका क्या बनाई जानी है और यह टेम्पलेट HTML में कस्टम टेम्पलेट को लोड करने की आवश्यकता का भी वर्णन करता है। धन्यवाद।
१६:२० पर त्रुथिड्रोस्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.