Как использовать математические остатки в шаблоне Django? - PullRequest
1 голос
/ 17 сентября 2009

Я хотел бы изменить атрибут класса li после каждых 4 элементов (это означает, что 5-й, 9-й, 13-й классы элементов li должны быть изменены).

Я пробовал что-то вроде ниже, но это дало мне синтаксическую ошибку: Не удалось проанализировать остаток: «% 4» из «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 %}

Буду признателен, если кто-нибудь предложит мне рабочее решение.

Ответы [ 5 ]

7 голосов
/ 29 ноября 2012

Вы можете использовать forloop.counter0 и фильтр делится на:

{% ifequal forloop.counter0|divisibleby:"4" %}
5 голосов
/ 17 сентября 2009

Вы не можете делать такие оценки в шаблоне django.Тег ifequal ожидает только два параметра и сравнивает их.Вам понадобится какой-то тип фильтра.

Однако вместо этого вы можете использовать метку цикла:

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

РЕДАКТИРОВАТЬ: Как указано, исходное решение очистило 4, 8 и т. Д.а не с 5го числа.Я обновил ответ, включив в него изменения по Толге.

2 голосов
/ 17 сентября 2009

Логика будет сложной, но фильтр , делимый на , может помочь.

1 голос
/ 17 сентября 2009

Вы не хотите делать это так - вот для чего cycle.

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

Этот пример очищает 5, 9, 13 и т. Д.

Редактировать: наконечник шляпы @ cpharmston.

0 голосов
/ 09 мая 2019

Я немного боролся с этим, пытаясь ограничить количество карт Bootstrap до 3 на колоду карт.

Это работает в Django 2.1 и выше, чтобы ограничить ряд группами из 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...