143 votes

Module% dans le modèle Django

Je cherche un moyen d'utiliser quelque chose comme l'opérateur de module dans django. Ce que j'essaie de faire est d'ajouter un nom de classe à chaque quatrième élément d'une boucle.

Avec le module, cela ressemblerait à ceci:

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

Bien sûr, cela ne fonctionne pas car% est un caractère réservé. Y a-t-un autre moyen de faire ça?

256voto

Burhan Khalid Points 50578

Vous avez besoin de divisibleby , un filtre Django intégré.

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

18voto

mipadi Points 135410

Vous ne pouvez pas utiliser l'opérateur de module dans les balises de modèle Django, mais il serait assez facile d'écrire un filtre pour le faire. Quelque chose comme ça devrait marcher:

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

Et alors:

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

Vous pouvez même faire quelque chose comme ça, à la place:

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

Et alors:

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

Ou vous pouvez utiliser la balise cycle :

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

14voto

thatwasbrilliant Points 425

Il semble que vous devriez simplement utiliser la balise cycle. Balises de modèles intégrées

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X