Ограничения шаблонных фильтров
Я хочу, чтобы дополнение фильтра принимало любое количество аргументов и складывало числа вместе.
Пользовательский шаблонный фильтр может не принимать более одного параметра справа (и неявного параметра слева), как указано в документации :
Пользовательские фильтры - это просто функции Python, которые принимают одну или две
Аргументы
- Значение переменной (входной) - не обязательно строка.
- Значение аргумента - оно может иметь значение по умолчанию или вообще не указываться.
Лично я не очень понимаю, почему ты так хочешь. Вы могли бы сделать гранулярность тега более тонкой и написать ее так:
{{ ASEL.total_time|add:AMEL.total_time|add:ASES.total_time|add:AMES.total_time|some_round }}
(где вы можете применить шаблонный фильтр some_round
для округления результата).
Вы также можете решить эту проблему, взяв один необязательный параметр, например строку, и затем выполнить обработку строки, но это обычно приводит только к более сложному коду, возможно, с ошибками.
Использование тегов шаблона
Однако вы можете определить шаблонный тег , шаблонные теги могут принимать несколько параметров (как позиционных, так и именованных). Например:
# app/templatetags/math_filters.py
<b>@register.simple_tag</b>
def addition(*args):
return round(sum(list(args)), 1)
Тогда вы можете написать это как:
{% load math_filters %}
<b>{% addition</b> ASEL.total_time AMEL.total_time AMES.total_time <b>%}</b>
или если вы хотите сохранить результат в переменной:
{% load math_filters %}
{% addition ASEL.total_time AMEL.total_time AMES.total_time <b>as some_variable</b> %}
Примечание : поскольку переменная может содержать все типы типов, вы можете сделать тег шаблона более гибким для интерпретации строк и т. Д. В качестве числовых значений.