【问题标题】: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
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
这里value和arg不必是int,也可以是float,也不需要在模板中加载任何标签进行乘法运算。