Domanda

Vorrei cambiare l'attributo class di un li dopo ogni 4 elementi (ciò significa che le classi di elementi li 5, 9, 13 dovrebbero essere cambiate).

Ho provato qualcosa come sotto ma mi ha dato un errore di sintassi: Impossibile analizzare il resto: '% 4' da '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 %}

Apprezzerò se qualcuno mi suggerirà una soluzione funzionante.

È stato utile?

Soluzione

Non puoi fare valutazioni del genere nel modello django. Il tag ifequal prevede solo due parametri e li confronta. Avresti bisogno di un tipo di filtro.

Tuttavia, è possibile utilizzare invece il tag ciclo:

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

MODIFICA: Come sottolineato, la soluzione originale ha eliminato il 4, l'8 °, ecc., anziché dal 5 in poi. Ho aggiornato la risposta per includere le modifiche di Tolga.

Altri suggerimenti

Puoi usare forloop.counter0 e filtrare divisibile per:

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

La logica sarebbe complessa, ma il divisibleby filtro potrebbe aiutare.

Non vuoi farlo in questo modo - ecco cosa ciclo è per.

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

Quell'esempio cancella il 5 °, 9 °, 13 ° ecc.

Modifica: hat tip @cpharmston.

Ho faticato per un po ', cercando di limitare le carte Bootstrap a 3 per mazzo di carte.

Funziona in Django 2.1 e versioni successive, per limitare una riga a gruppi di 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top