首页 > 解决方案 > 如何在模板的数学表达式中使用 django forloop.counter0?

问题描述

我想在数学表达式中使用django 内置模板标签。 forloop.counter0这就是我想出的:

{% for category in categories %}
        <li class="wow fadeInUp" data-wow-delay="{{ forloop.counter0 * 0.1 }}s">
                //whatever
        </li>
{% endfor %}

我了解到这是导致此错误的错误原因:

无法解析余数:来自“forloop.counter0 * 0.1”的“* 0.1”

无论如何要解决这个问题吗?

无论如何我不能在数学表达式中使用内置函数吗?

标签: djangodjango-templatesbuilt-in

解决方案


可以使用widthratiotag 来实现这一点,也可以使用 custom templatetag,如 Mauricio 评论中所述,但widthratio最终值应该是数字,不能是float,所以这可能是问题。

所以有第三种方法可以通过使用来实现这一点template-filters

所以对于乘法,你可以把它放在你的templatetags

from django import template
register = template.Library()

@register.filter(is_safe=False)
def multiply(value, arg):
    """Multiply the arg to the value."""
    try:
        return float(value) * float(arg)
    except (ValueError, TypeError):
        try:
            return value * arg
        except Exception:
            return ''

并在模板中使用它

{{ forloop.counter0|multiply:'0.1' }}

{{ '0.002'|multiply:'0.21' }}  # Output : 0.00042

这里valuearg不需要int,也可以是float,也不需要在模板中加载任何标签进行乘法运算。


推荐阅读