Фильтры шаблонов Django, теги, simple_tags и include_tags

Это должно работать...

DECLARE @endDate DATETIME
DECLARE @today DATETIME

SELECT @endDate = getDate()+6, @today = getDate()

SELECT * FROM Employees 
    WHERE 
    (DATEPART (month, birthday) >= DATEPART (month, @today)
        AND DATEPART (day, birthday) >= DATEPART (day, @today))
    AND
    (DATEPART (month, birthday) < DATEPART (month, @endDate)
        AND DATEPART (day, birthday) < DATEPART (day, @endDate))
30
задан Eric Conner 7 April 2011 в 19:51
поделиться

1 ответ

Шаблонные фильтры могут работать с любым объектом (и не более двух одновременно). Это просто функции, которые принимают один или два аргумента. например,

# 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 аргумента, вы можете принять столько, сколько захотите (и вы также можете получить доступ к контексту шаблона).

49
ответ дан 27 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: