Как я могу вызвать фильтр с более чем одним аргументом? - PullRequest
2 голосов
/ 19 августа 2011

Мне нужно вызвать фильтр с более чем одним аргументом.

Если фильтр принимает только один параметр, например, «cut», мы можем вызвать его с помощью

{{ somevariable|cut:"0" }}

Но если я создаю собственный фильтр, который принимает два параметра, я не могу вызвать его с правильным синтаксисом.

Для ответов, я спрашиваю только это:

  • Я не хочу отправлять один аргумент и анализировать его в моем пользовательском фильтре.
  • Я тоже не хочу связывать фильтры.

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

def urlizetrunc(value, limit, autoescape=None):

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Вы не можете. Единственные обходные пути - передать один параметр и разобрать его по частям, или передать переменную, внешнюю по отношению к фильтру.

В документе указано, что это невозможно сделать с пользовательскими фильтрами. См. этот вопрос для более подробного объяснения.

Нельзя напрямую передавать несколько параметров в нестандартные фильтры, такие как urlizetrunc. urlizetrunc принимает один параметр из шаблона. autoescape устанавливается путем вызова тега autoescape с параметром «off» или «on». Когда вы вызываете urlizetrunc из шаблона, он передает любое значение, которое было установлено для autoescape. Вы не можете передать значение autoescape непосредственно из шаблона. См. этот вопрос для более подробного объяснения.

1 голос
/ 19 августа 2011

Вам придется согласиться на то, что вы берете один аргумент, а затем анализируете его. Параметр autoescape является особым, потому что он существует в тех случаях, когда вашему фильтру нужно знать, включено или выключено автоэкранирование. Для получения дополнительной информации, проверьте эту ссылку: https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping

Но анализ аргумента в вашем пользовательском фильтре не так сложен, обычно он просто делает argument.split(" ") или argument.split(",")

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