. Встроенные шаблонные теги и фильтры¶
Встроенные шаблонные теги и фильтры¶

Встроенные шаблонные теги и фильтры¶

Этот раздел описывает строенные шаблонные теги и фильтры Django. Рекомендуем использовать автоматическую документацию по возможности, т.к. она включает также собственные теги и фильтры.

Список встроенных тегов¶

autoescape¶

Контролирует авто-экранирование. Этот тег принимает on или off аргумент, указывающий должно ли использоваться автоматическое экранирование внутри блока. Блок закрывается закрывающим тегом endautoescape .

Если экранирование включено, ко всем переменным будет применяется HTML-экранирование перед выводом (но после применения всех фильтров). Это эквивалентно использованию фильтра escape для каждой переменной.

Не будут экранированы переменные помеченные как безопасные( “safe”), или кодом определяющим переменную, или после применения фильтров safe или escape .

block¶

Определяет блок, который может быть переопределен в дочернем шаблоне. Смотрите подробности в разделе о наследовании шаблонов.

comment¶

Игнорирует все между и

Тег comment не может быть вложенным.

csrf_token¶

Этот тег используется для организации CSRF защиты, как это описано в Cross Site Request Forgeries.

cycle¶

Возвращает один из аргументов при вызове. Первый аргумент при первом вызове, второй - при втором, и т.д. Когда аргументы кончаются, тег начинает с начала списка аргументов.

Этот тег полезен в циклах:

Первый вызов сгенерирует HTML используя класс row1 , второй - row2 , третий - снова row1 , и так далее для каждой итерации цикла.

Вы можете также использовать переменные. Например, если у вас есть две переменных в шаблоне, rowvalue1 и rowvalue2 , вы можете переключаться между их значениями:

Следует отметить, что в настоящее время переменные включенные в тег не будут экранированы. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с безопасностью. Если вам необходимо экранирование, используйте его явно:

В можете использовать переменные и строки вместе:

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

Теперь вы можете использовать текущее значение цикла в любом месте шаблона используя переданное название как переменную контекста. Если вам необходимо следующее значение, используйте тег снова, используя название переменной. Следующий шаблон:

Вы можете использовать любое количество значений в теге cycle , разделенных пробелами. Значения в одинарных ( ' ) или двойных кавычках ( " ) рассматриваются как строки, в то время как, значения без кавычек, интерпретируются как переменные.

По умолчанию, использование тега с аргументом as выведет первое значение цикла. Это может быть проблемой, если вы хотите использовать значение во вложенном теге или в включенном теге. Если вы хотите просто определить цикл, но не выводить первое значение, используйте аргумент silent в конце тега. Например:

Это выведет список элементов <tr> с class чередующийся между row1 и row2 ; включенный шаблон будет иметь доступ к переменной rowcolors , которая содержит класс <tr> . Если бы аргумент silent не использовался, row1 и row2 вывелись бы как обычный текст вне <tr> .

Если используется аргумент silent , он будет автоматически применен ко всем последующим вызовам этого цикла. Этот шаблон ничего не выведет, даже учитывая что второй вызов не использует silent :

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

Такой синтаксис воспринимает все как строки, и нет возможности передать переменные, использовать запятую или пробел в качестве значения. Мы уже говорили что не следует использовать этот синтаксис в новых проектах?

Для безопасности в следующих версиях cycle будет экранировать свой вывод. Вы можете использовать это уже сейчас загрузив тег cycle из библиотеки тегов future :

Используя версию из future , автоматическое экранирование можно выключить:

debug¶

Выводит всю отладочную информацию, в том числе текущей контекст и импортированные модули.

extends¶

Указывает что данный шаблон наследуется от родительского.

Может использоваться двумя способами:

(с кавычками) использует буквальное значение "base.html" в качестве названия родительского шаблона.

использует значение variable . Если значение строка, Django использует ее как название родительского шаблона. Если значение переменной объект Template , Django использует этот объект как родительский шаблон.

filter¶

Содержимое тега будет обработано указанными фильтрами. Можно указать цепочку фильтров, а также их аргументы, как и при выводе переменной в шаблоне.

Содержимое тега включает весь текст между filter и endfilter .

Нельзя передавать фильтры escape и safe . Вместо этого используйте тег autoescape .

firstof¶

Выводит первую из переданных переменных, которая не равна False . НЕ экранирует значения переменных.

Ничего не выводит, если все переменные равны False .

Вы можете использовать строку как значение по-умолчанию на случай, если все переменные равны False :

Следует отметить, что в настоящее время переменные включенные в тег firstof не будут экранированы, потому что теги не экранируют аргументы. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с безопасностью. Если вам необходимо экранирование, используйте его явно:

To improve safety, future versions of firstof will automatically escape their output. You’re encouraged to activate this behavior by loading firstof from the future template library:

Используя версию из future , автоматическое экранирование можно выключить:

Or if only some variables should be escaped, you can use:

Цикл по каждому элементу массива, добавляя их в конекст блока. Например, выведем список спортсменов из athlete_list :

Вы можете использовать цикл по списку в обратном порядке .

Если вам нужен цикл по списку списков, вы можете распаковать значения под-списка на отдельные переменные. Например, если ваш контекст содержит список (x,y) координат points , вы можете использовать следующий код для их вывода:

Аналогично можно использовать словарь. Например, если ваш контекст содержит словарь data , следующий код выведет ключи и значения словаря:

Внутри цикла доступные некоторые дополнительные переменные:

Номер текущей итерации цикла начиная с 1

Номер текущей итерации цикла начиная с 0

Номер текущей итерации цикла начиная с конца с 1

Номер текущей итерации цикла начиная с конца с 0

True , если это первая итерация

True , если это последняя итерация

Для вложенных циклов, это “внешний” цикл.

for . empty¶

Тег for содержит необязательную часть , которая будет отображена, если список пуст или не найден:

Это эквивалентно, но короче, читабельней и возможно быстрее, такому коду:

Тег вычисляет переменную и если она равна “true” (то есть существует, не пустая и не равна “false”) выводит содержимое блока:

В примере выше, если athlete_list не пустой, будет отображено количество спортсменов > .

Как вы можете видеть, тег if может содержать один или несколько блоков `` ``, так же как и блок , который будет выведен, если все предыдущие условия не верны. Все эти блоки необязательны.

Булевы операторы¶

Тег if может использовать and , or или not :

Можно использовать and и or вместе, операция and имеет больший приоритет чем or , например:

будет интерпретировано как:

Использовать скобки в теге if нельзя. Если вам нужно указать приоритет, используйте вложенные теги if .

📎📎📎📎📎📎📎📎📎📎