Неверный шаблон фильтра Ошибка Django 1.11 - PullRequest
0 голосов
/ 24 августа 2018

Это мой фильтр: из шаблона импорта 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 dir находится на том же уровне, что и models.py, и содержит __init__.py

Я полностью потерян.Есть идеи?

1 Ответ

0 голосов
/ 24 августа 2018

Ограничения шаблонных фильтров

Я хочу, чтобы дополнение фильтра принимало любое количество аргументов и складывало числа вместе.

Пользовательский шаблонный фильтр может не принимать более одного параметра справа (и неявного параметра слева), как указано в документации :

Пользовательские фильтры - это просто функции Python, которые принимают одну или две Аргументы

  1. Значение переменной (входной) - не обязательно строка.
  2. Значение аргумента - оно может иметь значение по умолчанию или вообще не указываться.

Лично я не очень понимаю, почему ты так хочешь. Вы могли бы сделать гранулярность тега более тонкой и написать ее так:

{{ 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> %}

Примечание : поскольку переменная может содержать все типы типов, вы можете сделать тег шаблона более гибким для интерпретации строк и т. Д. В качестве числовых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...