Пользовательские теги и фильтры шаблонов ¶
Язык шаблонов Django поставляется с широким спектром встроенных тегов и фильтров, предназначенных для удовлетворения потребностей логики представления вашего приложения. Тем не менее, вам может потребоваться функциональность, которая не входит в базовый набор шаблонных примитивов. Вы можете расширить механизм шаблонов, определив пользовательские теги и фильтры с помощью Python, а затем сделать их доступными для ваших шаблонов с помощью тега.
Макет кода ¶
Сервер разработки не перезагружается автоматически
После добавления templatetags модуля вам нужно будет перезагрузить сервер, прежде чем вы сможете использовать теги или фильтры в шаблонах.
И в своем шаблоне вы должны использовать следующее:
Нет ограничений на количество модулей, которые вы кладете в templatetags пакет. Просто имейте в виду, что оператор будет загружать теги / фильтры для данного имени модуля Python, а не для имени приложения.
Чтобы быть допустимой библиотекой тегов, модуль должен содержать переменную уровня модуля с именем, register которая является template.Library экземпляром, в котором зарегистрированы все теги и фильтры. Итак, в верхней части модуля поместите следующее:
Для получения дополнительной информации о load теге прочтите его документацию.
Написание пользовательских шаблонных фильтров ¶
Поскольку язык шаблонов не обеспечивает обработку исключений, любое исключение, вызванное фильтром шаблона, будет отображаться как ошибка сервера. Таким образом, функции фильтрации должны избегать возникновения исключений, если есть разумное значение для возврата, которое необходимо вернуть. В случае ввода, который представляет явную ошибку в шаблоне, создание исключения все же может быть лучше, чем тихая ошибка, которая скрывает ошибку.
Вот пример определения фильтра:
А вот пример использования этого фильтра:
Большинство фильтров не принимают аргументов. В этом случае оставьте аргумент вне функции:
Регистрация пользовательских фильтров ¶
После того, как вы написали определение фильтра, вам необходимо зарегистрировать его в своем Library экземпляре, чтобы сделать его доступным для языка шаблонов Django:
Library.filter() Метод принимает два аргумента:
register.filter() Вместо этого вы можете использовать в качестве декоратора:
Если вы опустите name аргумент, как во втором примере выше, Django будет использовать имя функции в качестве имени фильтра.
Шаблонные фильтры, ожидающие строк ¶
Таким образом, вы сможете передать, скажем, целое число в этот фильтр, и он не вызовет AttributeError (потому что целые числа не имеют lower() методов).
Фильтры и автоматическое экранирование ¶
При написании настраиваемого фильтра подумайте о том, как фильтр будет взаимодействовать с поведением автоматического экранирования Django. Обратите внимание, что внутри кода шаблона можно передавать два типа строк:
Код шаблонного фильтра попадает в одну из двух ситуаций:
Этот флаг сообщает Django, что если в ваш фильтр будет передана «безопасная» строка, результат все равно будет «безопасным», а если будет передана небезопасная строка, Django автоматически экранирует ее, если это необходимо.
Причина is_safe в том, что существует множество обычных строковых операций, которые превратят SafeData объект обратно в нормальный str объект, и вместо того, чтобы пытаться поймать их все, что было бы очень сложно, Django восстанавливает повреждения после завершения работы фильтра.
Например, предположим, что у вас есть фильтр, который добавляет строку xx в конец любого ввода. Поскольку это не вводит в результат никаких опасных HTML-символов (кроме тех, которые уже присутствовали), вы должны пометить свой фильтр следующим образом is_safe :
Когда этот фильтр используется в шаблоне, где включено автоматическое экранирование, Django будет экранировать вывод, если ввод еще не отмечен как «безопасный».
В качестве альтернативы, ваш код фильтра может вручную позаботиться о любом необходимом экранировании. Это необходимо, когда вы вводите в результат новую разметку HTML. Вы хотите пометить вывод как безопасный от дальнейшего экранирования, чтобы ваша разметка HTML не экранировалась дальше, поэтому вам нужно будет обработать ввод самостоятельно.
Например, напишем фильтр, выделяющий первый символ строки:
Наконец, в приведенном выше примере мы не забываем пометить результат как безопасный, чтобы наш HTML-код вставлялся непосредственно в шаблон без дальнейшего экранирования.
В этом случае не нужно беспокоиться о is_safe флаге (хотя его включение ничему не повредит). Каждый раз, когда вы вручную обрабатываете проблемы с автоматическим экранированием и возвращаете безопасную строку, is_safe флаг в любом случае ничего не изменит.
Избежание XSS-уязвимостей при повторном использовании встроенных фильтров
Встроенные фильтры Django имеют autoescape=True по умолчанию, чтобы получить правильное поведение при автоматическом экранировании и избежать уязвимости межсайтового скрипта.
Документация Django 1.4
Этот раздел описывает строенные шаблонные теги и фильтры Django. Рекомендуем использовать автоматическую документацию по возможности, т.к. она включает так же собственные теги и фильтры.
Список встроенных тегов¶
autoescape¶
block¶
Определяет блок, который может быть переопределен в дочернем шаблоне. Смотрите подробности в разделе о наследовании шаблонов.
comment¶
Игнорирует все между и
csrf_token¶
В Django 1.1.X, это ничего не делающий тег, который возвращает пустую строку, добавленный для совместимости версий. В Django 1.2 и выше, используется для CSRF защиты, как описано в разделе о Cross Site Request Forgeries.
cycle¶
Циклически перебирает переданные строки или значения каждый раз, когда выполняется тег.
В цикле, поочередно выводит строку переданную в тег:
Обратите внимание, что переменные используемые в качестве аргументов ( rowvalue1 и rowvalue2 из примера выше) НЕ будут экранированы! Так что или убедитесь, что вы доверяете переменным, или используйте явное экранирование, например:
В можете использовать переменные и строки вместе:
В некоторых случаях вам может понадобиться обратиться к значению не в цикле. Что бы сделать это, просто передайте в тег название, используя “as”, например:
Теперь вы можете использовать текущее значение цикла в любом месте шаблона используя переданное название как переменную контекста. Если вам необходимо следующее значение, используйте тег снова, используя название переменной. Следующий шаблон:
Переменные не будут экранированы. Это потому, что теги не экранируют свое содержимое. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с защитой.
Для обратной совместимости, тег поддерживает старый синтаксис предыдущих версий Django. Вы не должны его использовать в новых проектах, но для тех кому интересно он выглядит таким образом:
Такой синтаксис воспринимает все как строки, и нет возможности передать переменные, использовать запятую или пробел в качестве значения. Мы уже говорили что не следует использовать этот синтаксис в новых проектах?
По-умолчанию, использование тега с аргументом as выведет первое значение цикла. Это может быть проблемой, если вы хотите использовать значение во вложенном теге или в включенном теге. Если вы хотите просто определить цикл, но не выводить первое значение, используйте аргумент silent в конце тега. Например:
debug¶
Выводит всю отладочную информацию, в том числе текущей контекст и импортированные модули.
extends¶
Указывает что данный шаблон наследуется от родительского.
Может использоваться двумя способами:
(с кавычками) использует буквальное значение «base.html» в качестве названия родительского шаблона.
filter¶
Применяет фильтры к содержимому блока.
Можно передавать группу фильтров и они могут содержать фильтры – синтаксис аналогичен выводу переменных в шаблоне.
firstof¶
Вы можете использовать сроку как значение по-умолчанию на случай, если все переменные равны False :
Переменные не будут экранированы. Это потому, что теги не экранируют свое содержимое. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с защитой. Если вам необходимо экранирование, используйте его явно:
Цикл по каждому элементу массива. Например, выведем список спортсменов из athlete_list :
Внутри цикла доступные некоторые дополнительные переменные:
Номер текущей итерации цикла начиная с 1
Номер текущей итерации цикла начиная с 0
Номер текущей итерации цикла начиная с конца с 1
Номер текущей итерации цикла начиная с конца с 0
Для вложенных циклов, это “внешний” цикл.
Это эквивалентно, но короче, читабельней и возможно быстрее, такому коду:
Тег вычисляет переменную и если она равна “true” (то есть существует, не пустая и не равна “false”) выводит содержимое блока:
Булевы операторы¶
будет интерпретировано как:
Оператор == ¶
Оператор ¶
Меньше чем. Например:
Оператор > ¶
Больше чем. Например:
Оператор ¶
Меньше чем или равно. Например:
Оператор >= ¶
Больше чем или равно. Например:
Оператор in ¶
Вхождение в. Этот оператор поддерживается большинством контейнеров Python, что бы проверит входит ли значение в контейнер. Несколько примеров как работает x in y :
Оператор not in ¶
Операторы сравнения не могут использовать вместе как в Python или математике. Например, вместо использования:
вы должны использовать:
Фильтры¶
Сложные выражения¶
(Это точно повторяет Python). Таким образом, например, следующий сложный тег if :
. будет интерпретирован как:
ifchanged¶
Проверяет было ли изменено значение с предыдущей итерации цикла.
Блочный тег используется внутри цикла. Существует два способа использовать тег.
Проверять содержимое тега и если оно было изменено с последней итерации, отображать его. Например, этот код отображает список дней и отображает месяц только при его изменении:
Если передано одна или более переменных, проверяет была ли изменена одна из переменных. Например, следующий код отображает дату при каждом изменении, в то же время отображает час, если час или дата были изменены:
ifequal¶
Выводит содержимое блока, если два аргумента равны
Аргументом может быть строка:
ifnotequal¶
include¶
Загружает шаблон и выводит его с текущим контекстом. Это способ “включить” один шаблон в другой.
Названия шаблона можно указать переменной или строкой в одинарных или двойных кавычках.
Это пример включает содержимое шаблона «foo/bar.html» :
Этот пример включает содержимое шаблона, чье имя содержится в переменной template_name :
Включенный шаблон выполняется с контекстом шаблона, который его включает. Этот пример выводит «Hello, John» :
Вы можете передать дополнительные переменные контекста в шаблон используя именованные аргументы:
Если вы хотите выполнить шаблон используя только указанные переменные в контексте (или не используя переменные совсем), добавите параметр only :
Загружает библиотеку тегов.
Например, следующий шаблон загрузил бы все теги и фильтры зарегистрированные в somelibrary и otherlibrary который находится в пакете package :
Вы можете экранировать символ форматирования с помощью слэша, что бы использовать его как строку. В этом примере, “f” экранирован, т.к. в другом случае “f” будет использован как строка форматирования отображающая время. Символ “o” не экранирован т.к. это не символ форматирования:
Этот пример выведет “It is the 4th of September”.
regroup¶
Группирует объекты по общему атрибуту.
. и вам нужно отобразить список отсортированный по полу:
Вы можете использовать тег что бы сгруппировать список по полу(gender). Следующий шаблон делает это:
создает список (в нашем случае gender_list ) из групп объектов. Каждый объект группы содержит два атрибута:
grouper – значение, по которому происходила группировка (например, строка “Male” или “Female”).
list – список объектов в группе (например, список всех людей с gender=’Male’ ).
В результате применения тега для списка выше получим такой результат:
Самый простой способ решить эту проблему удостоверится, что данные отсортированы так, как должны быть отображены.
Группировка по другим свойствам¶
Можно группировать объекты по методу, атрибуту, ключу словаря и списку объектов, в общем по всему, к чему можно получить доступ в шаблоне. Например, если “gender” это внешний ключ на модель с атрибутом “description,” вы можете использовать:
spaceless¶
Убирает пробелы между HTML тегами, включая символы табуляции и перенос строки.
Этот пример вернет такой HTML:
Будут удалены пробелы только между тегами, и оставит между тегами и текстом. В этом примере пробелы вокруг Hello не будут удалены:
Выводит содержимое файла в шаблон.
Если используется не обязательный параметр “parsed”, содержимое включаемого файла будет выполнено как код шаблона используя текущий контекст:
templatetag¶
Выводит один из символов, которые используются для определения тегов.
Аргумент указывает какой элемент синтаксиса отображать:
Возвращает абсолютную ссылку (URL без имени домена) соответствующую указанному представлению с необязательными аргументами. Этот способ выводить ссылки, без “хардкодинга” в шаблоне, что бы не нарушать принцип DRY:
Нельзя использовать и позиционные и именованные аргументы в одно теге. Все обязательные аргументы URLconf должны быть указаны.
Если URLconf приложения добавлен в URLconf проекта:
. в шаблоне можно создать ссылку на представление:
Если вы используете именованные шаблоны URL, можно указать имя шаблона в теге url вместо пути к представлению.
Если вам нужно получить URL без его отображения:
Такой синтаксис не вызовет исключение, если представление отсутствует. На практике вы будете использовать его для отображения ссылок на необязательные представления:
Если вы хотите использовать URL с указанным пространством имен, укажите полное имя:
Это приведет к использованию стандартной стратегии разрешения пространств имен в URL, включая использование данных контекста для определения текущего приложения.
Для обратной совместимости, тег поддерживает старый синтаксис разделения аргументов запятыми. Вы не должны его использовать в новых проектах. Для тех, кому интересно, пример как он выглядит:
Этот синтаксис не поддерживает использование запятых и знака равно в аргументах.
widthratio¶
Для создания гистограмм и других графиков, этот тег вычисляет отношение переданного значения к максимальному, а затем умножает отношение на константу.
Кэширует сложные переменные под простым названием. Это полезно при использовании “тяжелых” методов (например, тех, которые выполняют запрос к базе данных) несколько раз.
Вы можете указать больше одной переменной контекста:
Предыдущий синтаксис так же работает:
Список встроенных фильтров¶
Суммирует аргумент и значение.
Фильтр попытается преобразовать оба значения в целое число. Если это не удастся, он будет пытаться добавить значения в любом случае. Это работает для некоторых типов (строки, списки и др.) и не работает с другими. Если ничего не получится, будет выведена пустая строка.
Например, у нас есть:
Строки, которые могут быть преобразованы в числа, будут суммированы, а не объединены, как показано в примере выше.
addslashes¶
Добавляет слэш перед кавычкой. Удобно при экранировании строк в CSV, например.
capfirst¶
Делает заглавным первый символ значения.
center¶
Центрирует значение в поле заданной ширины.
Удаляет значение аргумента из строки, к которой применяется фильтр.
Форматирует дату в соответствии с указанным форматом.
Использует формат функции date() в PHP (http://php.net/date) с небольшими отличиями.
‘a.m.’ или ‘p.m.’ (немного отличается от функции PHP, так как отображает в стиле Associated Press.)
Название месяца, 3-х буквенное, в нижнем регистре.
ISO 8601 формат. (Заметим: в отличии от других форматов, таких как “Z”, “O” или “r”, формат “c” не добавит временную зону для относительного времени (смотрите datetime.tzinfo ).
День месяца, 2 цифры с ведущим нулем.
День недели, 3-х буквенное текстовое название.
Название временной зоны. Может быть в любом формате, или вернуть пустую строку в зависимости от объекта даты.
Название месяца, зависит от текущего языка. Используется для отображения полного называния даты.
‘listopada’ (для польского языка, не ‘Listopad’ )
Время, час в 12-часовом формате и минуты, минуты не отображаются если равны нулю. Собственное расширение.
Встроенные теги и фильтры шаблонов ¶
Справочник по встроенным тегам ¶
autoescape ¶
Управляет текущим автоматическим экранированием. Этот тег принимает либо, on либо off в качестве аргумента, и он определяет, действует ли автоматическое экранирование внутри блока. Блок закрывается endautoescape закрывающим тегом.
block ¶
Определяет блок, который может быть переопределен дочерними шаблонами. См. Раздел « Наследование шаблонов» для получения дополнительной информации.
comment ¶
comment теги не могут быть вложенными.
csrf_token ¶
cycle ¶
Этот тег особенно полезен в цикле:
Переменные, включенные в цикл, будут экранированы. Вы можете отключить автоматическое экранирование с помощью:
Вы можете смешивать переменные и строки:
В некоторых случаях вы можете захотеть обратиться к текущему значению цикла, не переходя к следующему значению. Для этого дайте тегу имя, используя «как», например:
С этого момента вы можете вставить текущее значение цикла в любое место вашего шаблона, указав имя цикла как контекстную переменную. Если вы хотите переместить цикл к следующему значению независимо от исходного cycle тега, вы можете использовать другой cycle тег и указать имя переменной. Итак, следующий шаблон:
По умолчанию, когда вы используете as ключевое слово с тегом цикла, использование того, что запускает цикл, само произведет первое значение в цикле. Это может быть проблемой, если вы хотите использовать значение во вложенном цикле или во включенном шаблоне. Если вы хотите только объявить цикл, но не вывести первое значение, вы можете добавить ключевое слово в качестве последнего ключевого слова в теге. Например: <% cycle %>silent
Вы можете использовать resetcycle тег, чтобы перезапустить тег с его первого значения, когда оно встретится в следующий раз.
debug ¶
Выводит полный набор отладочной информации, включая текущий контекст и импортированные модули.
extends ¶
Сигнализирует, что этот шаблон расширяет родительский шаблон.
Этот тег можно использовать двумя способами:
См. Раздел « Наследование шаблонов» для получения дополнительной информации.
filter ¶
Фильтрует содержимое блока с помощью одного или нескольких фильтров. С помощью конвейеров можно указать несколько фильтров, а фильтры могут иметь аргументы, как и в синтаксисе переменных.
escape И safe фильтры не являются приемлемыми аргументами. Вместо этого используйте autoescape тег для управления автоматическим экранированием блоков кода шаблона.
firstof ¶
Вы также можете использовать буквальную строку в качестве резервного значения, если все переданные переменные имеют значение False:
Этот тег автоматически экранирует значения переменных. Вы можете отключить автоматическое экранирование с помощью:
Или, если нужно экранировать только некоторые переменные, вы можете использовать:
Вы можете использовать синтаксис для сохранения вывода внутри переменной.
Зацикливается на каждом элементе в массиве, делая элемент доступным в переменной контекста. Например, чтобы отобразить список спортсменов, представленный в athlete_list :
Цикл for устанавливает ряд переменных, доступных в цикле:
| Переменная | Описание |
|---|---|
| forloop.counter | Текущая итерация цикла (с индексом 1) |
| forloop.counter0 | Текущая итерация цикла (с индексом 0) |
| forloop.revcounter | Количество итераций с конца цикла (с индексом 1) |
| forloop.revcounter0 | Количество итераций с конца цикла (с индексом 0) |
| forloop.first | Верно, если это первый раз в цикле |
| forloop.last | Истинно, если это последний раз в цикле |
| forloop.parentloop | Для вложенных циклов это цикл, окружающий текущий. |
for … empty ¶
Тег оценивает переменную, и если эта переменная является «истинным» (т.е. существует, не пустая, а не ложное логическое значение) содержимое блока выводится:
В приведенном выше примере, если athlete_list не пусто, количество спортсменов будет отображаться переменной. << athlete_list|length >>
Как видите, if тег может принимать одно или несколько предложений, а также предложение, которое будет отображаться, если все предыдущие условия не пройдут. Эти пункты не являются обязательными. <% elif %>
Булевы операторы ¶
будет интерпретироваться как:
Использование настоящих круглых скобок в if теге является недопустимым синтаксисом. Если вам нужно, чтобы они указывали приоритет, вы должны использовать вложенные if теги.
== оператор ¶
!= оператор ¶
оператор ¶
> оператор ¶
оператор ¶
Меньше или равно. Пример:
>= оператор ¶
Больше или равно. Пример:
in оператор ¶
Содержащиеся в. Этот оператор поддерживается многими контейнерами Python, чтобы проверить, находится ли данное значение в контейнере. Ниже приведены некоторые примеры того, как будет интерпретироваться: x in y
not in оператор ¶
Не содержится внутри. Это отрицание in оператора.
is оператор ¶
Идентичность объекта. Проверяет, являются ли два значения одним и тем же объектом. Пример:
is not оператор ¶
Отрицательная идентичность объекта. Проверяет, не являются ли два значения одним и тем же объектом. Это отрицание is оператора. Пример:
Фильтры ¶
Вы также можете использовать фильтры в if выражении. Например:
Сложные выражения ¶
Все вышеперечисленное можно комбинировать для образования сложных выражений. Для таких выражений может быть важно знать, как группируются операторы при вычислении выражения, то есть правила приоритета. Приоритет операторов, от низшего к высшему, следующий:
(Это в точности соответствует Python). Так, например, следующий сложный if тег:
… Будет интерпретироваться как:
Если вам нужен другой приоритет, вам нужно будет использовать вложенные if теги. Иногда это лучше для ясности, для тех, кто не знает правил приоритета.
Операторы сравнения не могут быть связаны, как в Python или в математической нотации. Например, вместо использования:
вы должны использовать:
ifequal и ifnotequal ¶
Не рекомендуется, начиная с версии 3.1.
ifchanged ¶
Проверьте, изменилось ли значение с последней итерации цикла.
Проверяет собственное отображаемое содержимое на соответствие его предыдущему состоянию и отображает содержимое только в том случае, если оно изменилось. Например, здесь отображается список дней, а месяц отображается только в случае его изменения:
Если задана одна или несколько переменных, проверьте, не изменилась ли какая-либо переменная. Например, следующее показывает дату каждый раз, когда она изменяется, и показывает час, если час или дата изменились:
include ¶
Загружает шаблон и отображает его с текущим контекстом. Это способ «включения» других шаблонов в шаблон.
Имя шаблона может быть переменной или жестко закодированной (заключенной в кавычки) строкой в одинарных или двойных кавычках.
Этот пример включает содержимое шаблона «foo/bar.html» :
Этот пример включает содержимое шаблона, имя которого содержится в переменной template_name :
Переменная также может быть любым объектом с render() методом, принимающим контекст. Это позволяет вам ссылаться на скомпилированный Template в вашем контексте.
Включенный шаблон отображается в контексте шаблона, который его включает. Этот пример дает результат : «Hello, John!»
Вы можете передать дополнительный контекст в шаблон, используя аргументы ключевого слова:
Если вы хотите отображать контекст только с предоставленными переменными (или даже без переменных), используйте эту only опцию. Для включенного шаблона нет других переменных:
Добавлена поддержка итераций имен шаблонов.
Загружает настраиваемый набор тегов шаблона.
Например, следующий шаблон загрузит все теги и фильтры, зарегистрированные в пакете somelibrary и otherlibrary расположенные в нем package :
Вы также можете выборочно загружать отдельные фильтры или теги из библиотеки, используя from аргумент. В этом примере теги / фильтры шаблона называются foo и bar будут загружены из somelibrary :
lorem ¶
Отображает случайный латинский текст «lorem ipsum». Это полезно для предоставления образцов данных в шаблонах.
Тег может быть использован с нулем, один, два или три аргумента. Аргументы следующие:
Отображает текущую дату и / или время в формате, соответствующем заданной строке. Такая строка может содержать символы спецификаторов формата, как описано в разделе date фильтров.
Обратите внимание, что вы можете экранировать строку формата с помощью обратной косой черты, если хотите использовать «сырое» значение. В этом примере и «o», и «f» экранированы обратной косой чертой, потому что в противном случае каждая из них представляет собой строку формата, которая отображает год и время соответственно:
Это будет отображаться как «4 сентября».
Вы также можете использовать синтаксис для сохранения вывода (в виде строки) внутри переменной. Это полезно, если вы хотите использовать внутри тега шаблона, например: <% now "Y" as current_year %> <% now %> blocktranslate
regroup ¶
Группирует список похожих объектов по общему атрибуту.
… И вы хотите отобразить иерархический список, отсортированный по странам, например:
Вы можете использовать тег для группировки списка городов по странам. Следующий фрагмент кода шаблона выполнит это:
Поскольку производит объекты, вы также можете записать предыдущий пример как: <% regroup %> namedtuple()
С этим вводом для cities приведенный выше пример кода шаблона приведет к следующему выводу:
Группировка по другим свойствам ¶
Любой допустимый поиск в шаблоне является допустимым атрибутом группировки для тега перегруппировки, включая методы, атрибуты, ключи словаря и элементы списка. Например, если поле «страна» является внешним ключом для класса с атрибутом «описание», вы можете использовать:
<< country.grouper >> теперь будет отображать поля значений из choices набора, а не ключи.
resetcycle ¶
Сбрасывает предыдущий цикл, чтобы он перезапустился с первого элемента при следующем столкновении. Без аргументов сбросит последнее значение, указанное в шаблоне. <% resetcycle %>
Этот пример вернет этот HTML:
Вы также можете сбросить именованные теги цикла:
В этом примере у нас есть как чередующиеся нечетные / четные строки, так и «основная» строка в каждой пятой строке. При изменении категории сбрасывается только пятистрочный цикл.
spaceless ¶
Удаляет пробелы между тегами HTML. Сюда входят символы табуляции и новые строки.
Этот пример вернет этот HTML:
Удаляется только пространство между тегами, но не пространство между тегами и текстом. В этом примере пространство вокруг Hello не будет удалено:
templatetag ¶
Выводит один из синтаксических символов, используемых для создания тегов шаблона.
Поскольку в системе шаблонов нет концепции «экранирования», для отображения одного из битов, используемых в тегах шаблона, вы должны использовать этот тег.
Аргумент сообщает, какой бит шаблона выводить:
| Аргумент | Выходы |
|---|---|
| openblock | <% |
| closeblock | %> |
| openvariable | << |
| closevariable | >> |
| openbrace | < |
| closebrace | > |
| opencomment | <# |
| closecomment | #> |
Это способ вывода ссылок без нарушения принципа DRY за счет необходимости жесткого кодирования URL-адресов в ваших шаблонах:
Не смешивайте позиционный синтаксис и синтаксис ключевых слов в одном вызове. Должны присутствовать все аргументы, требуемые URLconf.
Например, предположим, что у вас есть представление, app_views.client URLconf которого принимает идентификатор клиента (здесь client() метод внутри файла представлений app_views.py ). Строка URLconf может выглядеть так:
Если URLconf этого приложения включен в URLconf проекта по следующему пути:
… Затем в шаблоне вы можете создать ссылку на это представление следующим образом:
Обратите внимание, что если URL-адрес, который вы реверсируете, не существует, вы получите NoReverseMatch исключение, которое заставит ваш сайт отобразить страницу с ошибкой.
Если вы хотите получить URL-адрес, не отображая его, вы можете использовать немного другой вызов:
Этот синтаксис не вызовет ошибки, если представление отсутствует. На практике вы будете использовать это для ссылки на необязательные представления:
Если вы хотите получить URL-адрес в пространстве имен, укажите полное имя:
verbatim ¶
Останавливает механизм шаблонов от рендеринга содержимого этого тега блока.
Обычно используется для разрешения уровня шаблона JavaScript, который конфликтует с синтаксисом Django. Например:
Вы также можете назначить специальный закрывающий тег, позволяющий использовать его как часть неотрисованного содержимого:
widthratio ¶
Для создания гистограмм и т.п. этот тег вычисляет отношение заданного значения к максимальному значению, а затем применяет это отношение к константе.
Если this_value равно 175, max_value равно 200 и max_width равно 100, изображение в приведенном выше примере будет иметь ширину 88 пикселей (потому что 175/200 = 0,875; 0,875 * 100 = 87,5, что округляется до 88).
В некоторых случаях вы можете захотеть зафиксировать результат widthratio в переменной. Это может быть полезно, например, в blocktranslate таких случаях:
Кэширует сложную переменную под более простым именем. Это полезно при многократном обращении к «дорогостоящему» методу (например, к тому, который попадает в базу данных).
Заселены переменный (в приведенном выше примере, total ) доступно только между и тегами. <% with %>
Вы можете назначить более одной переменной контекста:
По-прежнему поддерживается предыдущий более подробный формат:
Справочник по встроенным фильтрам ¶
Добавляет аргумент к значению.
Этот фильтр сначала попытается преобразовать оба значения в целые числа. Если это не удастся, он все равно попытается сложить значения. Это будет работать с некоторыми типами данных (строки, список и т. Д.) И не работать с другими. В случае неудачи результатом будет пустая строка.
Например, если у нас есть:
addslashes ¶
Добавляет косую черту перед кавычками. Полезно, например, для экранирования строк в CSV.
capfirst ¶
Делает первый символ значения заглавным. Если первый символ не является буквой, этот фильтр не действует.
center ¶
Центрирует значение в поле заданной ширины.
Удаляет все значения arg из данной строки.
Форматирует дату в соответствии с заданным форматом.
Использует формат, аналогичный формату функции PHP date() ( https://php.net/date ) с некоторыми отличиями.
Эти символы формата не используются в Django вне шаблонов. Они были разработаны для совместимости с PHP, чтобы облегчить переход дизайнерам.
Доступные форматные строки:
Предположим, что USE_L10N есть True и LANGUAGE_CODE есть, например, «es» для:
выводом будет строка «09/01/2008» ( «SHORT_DATE_FORMAT» спецификатор формата для es локали, поставляемый с Django «d/m/Y» ).
При использовании без строки DATE_FORMAT формата используется спецификатор формата. При тех же настройках, что и в предыдущем примере:
выходы ( спецификатор формата для локали ). И «d», и «e» экранируются обратной косой чертой, потому что в противном случае каждая из них представляет собой строку формата, которая отображает день и название часового пояса, соответственно. 9 de Enero de 2008 DATE_FORMAT es r’j \d\e F \d\e Y’
Вы можете комбинировать date с time фильтром, чтобы отобразить полное представление datetime значения. Например:
default ¶
default_if_none ¶
Обратите внимание, что если дана пустая строка, значение по умолчанию использоваться не будет. Используйте default фильтр, если вы хотите отказаться от пустых строк.
dictsort ¶
Принимает список словарей и возвращает этот список, отсортированный по ключу, указанному в аргументе.



