这是我的过滤器: 从Django导入模板中
register = template.Library()
@register.simple_tag(name='addition')
def addition(*args):
return round(sum(list(args)), 1)
这是错误:
Invalid filter: 'addition'
在我的模板中:
{% load static %}
{% load math_filters %}
这是模板中的过滤器:
`{{ ASEL.total_time|addition:"AMEL.total_time, ASES.total_time, AMES.total_time" }}`
我希望过滤器addition
接受任意数量的参数并将其相加
我已经将文档跟踪到T了,但仍然无法获取标签进行注册。
templatetags
目录与models.py
处于同一级别,并且包含__init__.py
我完全迷路了。有什么想法吗?
答案 0 :(得分:1)
我希望添加的过滤器可以接受任意数量的参数,并将这些数字加在一起。
自定义模板过滤器 不能在documentation中指定的右侧使用多个参数(在左侧使用隐式参数):
自定义过滤器只是接受一两个的Python函数 参数:
- 变量(输入)的值–不一定是字符串。
- 参数的值–该参数可以具有默认值,也可以完全忽略。
我个人并不真正理解您为什么要这么做。您可以对标记 finer 进行细化,然后将其编写为:
{{ ASEL.total_time|add:AMEL.total_time|add:ASES.total_time|add:AMES.total_time|some_round }}
(您可以在其中实现some_round
模板过滤器以舍入结果)。
您还可以通过采用一个可选参数(例如字符串)然后执行字符串处理来解决此问题,但这通常只会导致更复杂的代码,可能包括错误。
但是,您可以定义模板标签,模板标签可以使用多个参数(位置参数和命名参数)。例如:
# app/templatetags/math_filters.py
@register.simple_tag
def addition(*args):
return round(sum(list(args)), 1)
然后您可以将其编写为:
{% load math_filters %}
{% addition ASEL.total_time AMEL.total_time AMES.total_time %}
或者如果要将结果存储在变量中:
{% load math_filters %}
{% addition ASEL.total_time AMEL.total_time AMES.total_time as some_variable %}
注意:由于变量可以包含所有类型,因此您可能希望使模板标签更加灵活,将字符串等解释为数值。 >