Pregunta

Me gustaría cambiar el atributo de clase de un li después de cada 4 elementos (eso significa que las clases de elementos 5º, 9º, 13º deberían cambiarse).

He intentado algo como a continuación, pero me dio un error de sintaxis: No se pudo analizar el resto: '% 4' de '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 %}

Apreciaré si alguien me sugiere una solución de trabajo.

¿Fue útil?

Solución

No puede hacer evaluaciones como esa en la plantilla django. La etiqueta ifequal espera solo dos parámetros y los compara. Necesitarías algún tipo de filtro.

Sin embargo, podría usar la etiqueta de ciclo en su lugar:

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

EDITAR: Como se señaló, la solución original borró el 4, 8, etc., en lugar de desde el 5 en adelante. He actualizado la respuesta para incluir los cambios de Tolga.

Otros consejos

Puede usar forloop.counter0 y filter divisibleby:

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

La lógica sería compleja, pero divisibleby filtro podría ayudar.

No quiere hacerlo así, eso es lo que cycle es para.

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

Ese ejemplo borra los días 5, 9, 13, etc.

Editar: hat tip @cpharmston.

Luché un poco con esto, tratando de limitar las cartas Bootstrap a 3 por mazo de cartas.

Esto funciona en Django 2.1 y superior, para limitar una fila a grupos de 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top