Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django模板中使用数学余数?_Django_Django Templates - Fatal编程技术网

如何在django模板中使用数学余数?

如何在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}} &

我想在每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 %}
{%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%}
  • {p.title}
  • {%else%}{p.title}{%endif%}{%endfor%}这将清除第5、9、13等。感谢你们所有人的宝贵回答和评论。感谢托尔加,我已通过修改更新了答案。这将清除第4、8、12…而不是第5、9、13。我已更改了建议的解决方案,该解决方案已按我的需要工作。{%p在plist%}{%if-forloop.first%}
  • {{p.title}}
  • {%else%}{{p.title}}{%endif%}{%endfor%}这将清除第5页、第9页等内容。感谢你们所有人的宝贵回答和评论。感谢托尔加,我已通过修改更新了答案。