Шаблонные фильтры могут работать на любом объекте (и не более двух одновременно).Это просто функции, которые принимают один или два аргумента.например,
# filter implementation
@filter
def myfilter(arg1, arg2):
....
# usage in template
{{ arg1|myfilter:arg2 }}
Они ограничены в том, что не могут получить доступ к контексту шаблона и могут принимать только ограниченное количество аргументов.
Вариант использования : Вы хотитеслегка измените одну из переменных в контексте перед ее печатью.
Теги шаблона могут изменить способ анализа остальной части шаблона и иметь доступ ко всему в контексте, в которомОни используются.Они очень мощные.Например, я написал тег шаблона, который подклассов {% extends %}
и позволяет шаблону расширять различные шаблоны в зависимости от текущего пользователя.
Вы можете легко распознать теги шаблона, когда они используются, потому что они окружены в {%
и %}
.
Вариант использования : вы хотите выполнить некоторую логику, требующую кода Python и доступа к контексту шаблона.
Теги включения по-прежнему являются шаблонными тегами, но Django предоставляет несколько помощников (например, @inclusion_tag
декоратор), чтобы упростить написание шаблонных тегов такого типа.
Вариант использования : Вы хотитесделать один шаблон в другой.Например, у вас может быть реклама на вашем сайте, которую вы хотите использовать в разных местах.Возможно, не удастся использовать наследование шаблонов для достижения того, чего вы хотите, поэтому вместо многократного копирования / вставки HTML-кода объявления вы должны написать тег включения.
Причина, по которой вы будете использовать включениетег поверх существующего тега шаблона {% include %}
означает, что вам может потребоваться отобразить шаблон с контекстом, отличным от того, в котором вы находитесь. Возможно, вам нужно выполнить несколько запросов к базе данных, чтобы выбрать правильное объявление для показа.Это невозможно с {% include %}
.
Простыми тегами , такими как теги включения, простые теги по-прежнему являются шаблонными тегами, но имеют ограниченную функциональность и написаны в упрощенном виде.Они позволяют вам написать тег шаблона, который принимает любое количество аргументов (например, {% mytag "some str" arg2 arg3 %}
и т. Д.), И требуют, чтобы вы реализовали только функцию, которая может принимать эти аргументы (и, необязательно, переменную context
, чтобы предоставить вам доступ к контексту шаблона)..
По сути, это обновление от шаблонных фильтров, потому что вместо того, чтобы принимать только 1 или 2 аргумента, вы можете принять столько, сколько захотите (и вы также можете получить доступ к контексту шаблона).