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)
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)
Bootstrap行和列示例.每4个项目新增一行.即使少于4个项目,也会关闭最后一行.
from django import template
register = template.Library()
@register.filter
def modulo(num, val):
return num % val
Run Code Online (Sandbox Code Playgroud)
{% 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)
| 归档时间: |
|
| 查看次数: |
34825 次 |
| 最近记录: |