我想在每个4个元素之后更改li的class属性(这意味着应该更改第5个,第9个,第13个li元素类)。
我尝试了类似下面的内容,但它给了我一个语法错误: 无法解析剩余部分:来自'forloop.counter%4'的'%4'
{% for p in plist %}
{% ifequal forloop.counter%4 1 %}
<li class="clear"> {{p.title}} </li>
{% else %}
<li> {{p.title}} </li>
{% endifequal %}
{% endfor %}
如果有人会建议我一个有效的解决方案,我将不胜感激。
答案 0 :(得分:7)
您可以使用forloop.counter0并过滤divisibleby:
{% ifequal forloop.counter0|divisibleby:"4" %}
答案 1 :(得分:5)
您无法在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个开始。我已经更新了答案,包括Tolga的更改。
答案 2 :(得分:2)
逻辑很复杂,但divisibleby过滤器可能会有所帮助。
答案 3 :(得分:1)
你不想这样做 - 这就是cycle
的用途。
{% for p in plist %}
<li{% ifnotequal forloop.counter 1 %}{% cycle ' class="clear"' '' '' '' %}{% endifnotequal %}>{{p.title}</li>
{% endfor %}
该例子清除了第5,第9,第13等等。
编辑:帽子提示@cpharmston。
答案 4 :(得分:0)
我为此作了一些努力,试图将Bootstrap卡限制为每张卡片组3张。
这在Django 2.1及更高版本中有效,将行限制为3组:
{% ifequal forloop.counter|divisibleby:"3" True %}