Pergunta

Gostaria de mudar o atributo de classe de um li depois de cada 4 elementos (o que significa 5, 9, 13 classes de elemento li deve ser mudado).

Eu tentei algo como abaixo, mas ele me deu um erro de sintaxe: Não foi possível analisar o restante: '% 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 %}

Eu aprecio se alguém vai me sugerir uma solução de trabalho.

Foi útil?

Solução

Você não pode fazer as avaliações como a do modelo de Django. A tag ifequal espera apenas dois parâmetros, e compara-los. Você iria precisar de algum tipo de filtro.

No entanto, você pode usar a tag ciclo em vez disso:

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

EDIT: Como foi salientado, a solução original cancelou a 4, 8, etc, em vez da partir do 5º em diante. Eu atualizei a resposta para incluir as mudanças por Tolga.

Outras dicas

Você pode usar forloop.counter0 e filtro divisibleby:

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

A lógica seria complexa, mas a divisibleby poder filtro de ajuda.

Você não quer fazê-lo assim - é o que cycle é para.

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

Esse exemplo limpa a 5ª, 9ª, 13ª etc.

Edit:. Chapéu de ponta @cpharmston

Eu lutei com isso por um pouco, tentando limitar Bootstrap cartas para 3 por cartão-deck.

Isso funciona em Django 2.1 e acima, para limitar uma linha para grupos de 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top