Django模板中的模数%

und*_*oeg 110 python django templates

我正在寻找一种方法来使用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 %}
Run Code Online (Sandbox Code Playgroud)

当然这不起作用,因为%是保留字符.有没有其他方法可以做到这一点?

Bur*_*lid 198

你需要divisibleby,一个内置的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 %}
Run Code Online (Sandbox Code Playgroud)

  • +1.忘了`divisibleby`,这也是一个很好的选择. (3认同)

mip*_*adi 13

你不能在Django模板标签中使用模数运算符,但编写过滤器就足够了.这样的事情应该有效:

@register.filter
def modulo(num, val):
    return num % val
Run Code Online (Sandbox Code Playgroud)

然后:

{% ifequal forloop.counter0|modulo:4 0 %}
Run Code Online (Sandbox Code Playgroud)

你甚至可以做这样的事情,而不是:

@register.filter
def modulo(num, val):
    return num % val == 0
Run Code Online (Sandbox Code Playgroud)

然后:

{% if forloop.counter0|modulo:4 %}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用cycle标签:

<div class="post width1 height2 column {% cycle 'first' '' '' '' %}">
Run Code Online (Sandbox Code Playgroud)


小智 13

听起来你应该只使用循环标签. 内置模板标签


ab *_* 16 8

Bootstrap行和列示例.每4个项目新增一行.即使少于4个项目,也会关闭最后一行.

的myapp/templatetags/my_tags.py

from django import template

register = template.Library()

@register.filter
def modulo(num, val):
    return num % val
Run Code Online (Sandbox Code Playgroud)

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 %}
Run Code Online (Sandbox Code Playgroud)

  • 这是更好的答案,因为它描述了创建所需目录的内容,并描述了在模板html中加载自定义模板的需要.谢谢. (2认同)