无效的过滤器模板错误Django 1.11

时间:2018-08-24 15:54:08

标签: django python-3.x django-templates

这是我的过滤器:     从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

我完全迷路了。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

模板过滤器的限制

  

我希望添加的过滤器可以接受任意数量的参数,并将这些数字加在一起。

自定义模板过滤器 不能在documentation中指定的右侧使用多个参数(在左侧使用隐式参数):

  

自定义过滤器只是接受一两个的Python函数   参数

     
      
  1. 变量(输入)的值–不一定是字符串。
  2.   
  3. 参数的值–该参数可以具有默认值,也可以完全忽略。
  4.   

我个人并不真正理解您为什么要这么做。您可以对标记 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 %}
  

注意:由于变量可以包含所有类型,因此您可能希望使模板标签更加灵活,将字符串等解释为数值。 >