【问题标题】:How to use django forloop.counter0 in a math expression in template?如何在模板的数学表达式中使用 django forloop.counter0?
【发布时间】:2018-12-03 10:39:39
【问题描述】:

我想在数学表达式中使用django built-in template tag forloop.counter0。这是我想出的:

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

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

无法解析余数:'* 0.1' from 'forloop.counter0 * 0.1'

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

难道我不能在数学表达式中使用内置函数吗?

【问题讨论】:

  • 是的,你是对的,我误解了柜台。您不能在 Django 模板中进行乘法运算,因此您可以使用自定义模板标签或使用 widthratio 标签来达到目的 stackoverflow.com/a/33280889/8196244

标签: django django-templates built-in


【解决方案1】:

可以使用widthratio 标签来实现这一点,也可以使用自定义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,也不需要在模板中加载任何标签进行乘法运算。

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多