如何在django模板中使用数学余数?
我想在每4个元素之后更改一个li的class属性(这意味着应该更改第5、9、13个li元素类) 我尝试了以下方法,但它给了我一个语法错误: 无法分析forloop.counter%4中的剩余部分:“%4”如何在django模板中使用数学余数?,django,django-templates,Django,Django Templates,我想在每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}} &
{% for p in plist %}
{% ifequal forloop.counter%4 1 %}
<li class="clear"> {{p.title}} </li>
{% else %}
<li> {{p.title}} </li>
{% endifequal %}
{% endfor %}
{%p在plist%}
{%ifequal forloop.counter%4 1%}
{{p.title}
{%else%}
{{p.title}}
{%endifequal%}
{%endfor%}
如果有人能向我推荐一个有效的解决方案,我将不胜感激。逻辑会很复杂,但过滤器可能会有所帮助。逻辑会很复杂,但过滤器可能会有所帮助。你不想这样做,这就是目的所在
{%p在plist%}
{{p.title}
{%endfor%}
这个例子清除了第五、第九、第十三等
编辑:hat tip@cpharmston.你不想那样做-这就是为什么
{%p在plist%}
{{p.title}
{%endfor%}
这个例子清除了第五、第九、第十三等
编辑:hat tip@cpharmston。您不能在django模板中执行类似的计算。ifequal标记只需要两个参数,并对它们进行比较。您需要某种类型的过滤器 但是,您可以使用cycle标记:
{% for p in plist %}
{% if forloop.first %}
<li> {{p.title}} </li>
{% else %}
<li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li>
{% endif %}
{% endfor %}
{%p在plist%}
{%if-forloop.first%}
{{p.title}}
{%else%}
{{p.title}}
{%endif%}
{%endfor%}
编辑:如前所述,原始解决方案清除了4、8等,而不是从5号开始。我已更新了答案,以包括Tolga所做的更改。您不能在django模板中进行类似的评估。ifequal标记只需要两个参数,并对它们进行比较。您需要某种类型的过滤器 但是,您可以使用cycle标记:
{% for p in plist %}
{% if forloop.first %}
<li> {{p.title}} </li>
{% else %}
<li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li>
{% endif %}
{% endfor %}
{%p在plist%}
{%if-forloop.first%}
{{p.title}}
{%else%}
{{p.title}}
{%endif%}
{%endfor%}
编辑:如前所述,原始解决方案清除了4、8等,而不是从5号开始。我已更新了答案,以包括Tolga所做的更改。您可以使用forloop.counter 0和filter divisibleby:
{% ifequal forloop.counter0|divisibleby:"4" %}
您可以使用forloop.counter0和filter divisibleby:
{% ifequal forloop.counter0|divisibleby:"4" %}
我为此挣扎了一会儿,试图将引导卡限制在每个卡组3张 这适用于Django 2.1及更高版本,将行限制为3组:
{% ifequal forloop.counter|divisibleby:"3" True %}
我为此挣扎了一会儿,试图将引导卡限制在每个卡组3张 这适用于Django 2.1及更高版本,将行限制为3组:
{% ifequal forloop.counter|divisibleby:"3" True %}
这样做是可行的,但正如您所说的那样,复杂程度可能会更高,因此最好将其移出视图。添加一个简单的属性更具可读性,应该会减少很多麻烦。我尝试过divisibleby,但不幸的是,它没有给出我需要的结果。使用divisibleby,我可以将属性更改为r4th,8th,而不是5th,9th..因此您也可以使用
add
过滤器:{%ifequalforloop.counter | add:“-1”|可除数b:4%}
很糟糕,但做了你想做的事。这样做是可行的,但正如你所说的那样,将其移出视图可能会更为复杂。添加一个简单的属性更具可读性,应该不会让人头疼。我尝试了divisibleby,不幸的是它没有给出我需要的结果。使用divisibleby;我可以更改4th、8th的属性,而不是5th、9th..因此您也可以使用add
过滤器:{%ifequal forloop.counter | add:“-1”| divisibleby:4%}
很糟糕,但做了您想做的事情。{%ifnotequal forloop.counter 1%}{%cycle'''class=“clear”}{%endifnotequal?我刚刚看到了您编辑的解决方案。我相信它也将提供相同的所需结果。关于{%ifnotequal forloop.counter 1%}{%cycle''''''class=“clear”%}{%endifnotequal%}?我刚刚看到了您编辑的解决方案。我相信它也将提供相同的要求结果。这将清除第4、8、12…而不是第5、9、13…我已更改了您建议的解决方案,该解决方案按我的需要工作。{%p在plist%}{%if forloop.first%}