Модуль% в шаблоне Django - PullRequest
       3

Модуль% в шаблоне Django

107 голосов
/ 13 декабря 2011

Я ищу способ использовать что-то вроде оператора модуля в django.Я пытаюсь добавить имя класса к каждому четвертому элементу в цикле.

С модулем это будет выглядеть так:

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0 % 4 == 0 %}first{% endif %}}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}

Конечно, это не работает, потому что% является зарезервированным символом.Есть ли другой способ сделать это?

Ответы [ 4 ]

190 голосов
/ 13 декабря 2011

Вам нужно делится на , встроенный фильтр Django.

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0|divisibleby:4 %}first{% endif %}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}
13 голосов
/ 13 декабря 2011

Звучит так, как будто вы должны просто использовать метку цикла. Встроенные теги шаблонов

13 голосов
/ 13 декабря 2011

Вы не можете использовать оператор модуля в тегах шаблонов Django, но для этого было бы достаточно легко написать фильтр.Примерно так должно работать:

@register.filter
def modulo(num, val):
    return num % val

А потом:

{% ifequal forloop.counter0|modulo:4 0 %}

Вместо этого вы могли бы даже сделать что-то вроде этого:

@register.filter
def modulo(num, val):
    return num % val == 0

А потом:

{% if forloop.counter0|modulo:4 %}

Или вы можете использовать тег cycle:

<div class="post width1 height2 column {% cycle 'first' '' '' '' %}">
7 голосов
/ 21 ноября 2017

Пример строк и столбцов начальной загрузки. Новый ряд каждые 4 пункта. Также закройте последний ряд, даже если в нем менее 4 пунктов.

MyApp / templatetags / my_tags.py

from django import template

register = template.Library()

@register.filter
def modulo(num, val):
    return num % val

HTML шаблон

{% load my_tags %}

{% for item in all_items %} 
    {% if forloop.counter|modulo:4 == 1 %}
        <div class="row">
    {% endif %}

        <div class="col-sm-3">
            {{ item }}
        </div>

    {% if forloop.last or forloop.counter|modulo:4 == 0 %}
        </div>
    {% endif %}

{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...