Question

Je voudrais changer l'attribut de classe d'un li après chaque 4 éléments (cela signifie que les 5ème, 9ème, 13ème li classes doivent être changées).

J'ai essayé quelque chose comme ci-dessous mais cela m'a donné une erreur de syntaxe: Impossible d'analyser le reste: '% 4' dans 'forloop.counter% 4'

{% for p in plist %}
{% ifequal forloop.counter%4 1 %}
    <li class="clear"> {{p.title}} </li>
{% else %}
    <li> {{p.title}} </li>
{% endifequal %}
{% endfor %}

J'apprécierai que quelqu'un me propose une solution efficace.

Était-ce utile?

La solution

Vous ne pouvez pas faire de telles évaluations dans le modèle Django. La balise ifequal n'attend que deux paramètres et les compare. Vous auriez besoin d’un type de filtre.

Cependant, vous pouvez utiliser la balise cycle à la place:

{% for p in plist %} 
    {% if forloop.first %} 
        <li> {{p.title}} </li>
    {% else %}
        <li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li> 
    {% endif %}
{% endfor %}

EDIT: Comme indiqué, la solution initiale supprimait les 4, 8, etc., au lieu de la 5ème. J'ai mis à jour la réponse pour inclure les modifications apportées par Tolga.

Autres conseils

Vous pouvez utiliser forloop.counter0 et filtrer par divisible par:

{% ifequal forloop.counter0|divisibleby:"4" %}

La logique serait complexe, mais le divisible par filtre pourrait aider.

Vous ne voulez pas le faire comme ça - c'est ce que cycle est pour.

{% for p in plist %}
        <li{% ifnotequal forloop.counter 1 %}{% cycle ' class="clear"' '' '' '' %}{% endifnotequal %}>{{p.title}</li>
{% endfor %}

Cet exemple efface les 5ème, 9ème, 13ème, etc.

Modifier: info-bulle @cpharmston.

J'ai eu quelques difficultés avec cela, essayant de limiter les cartes Bootstrap à 3 par jeu de cartes.

Ceci fonctionne dans Django 2.1 et supérieur, pour limiter une ligne à des groupes de 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top