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