Этот раздел описывает строенные шаблонные теги и фильтры Django. Рекомендуем использовать
по возможности, т.к. она включает так же собственные теги и фильтры.
Список встроенных тегов
autoescape
Контролирует авто-экранирование. Этот тег принимает
on или
off аргумент, указывающий должно ли использоваться автоматическое экранирование внутри блока. Блок закрывается закрывающим тегом
endautoescape.
Если экранирование включено, ко всем переменным будет применяется HTML-экранирование перед выводом (но после применения всех фильтров). Это эквивалентно использованию фильтра
escape для каждой переменной.
Не будут экранированы переменные помеченные как безопасные( “safe”), или кодом определяющим переменную, или после применения фильтров
safe или
escape.
Примеры использования:
block
Определяет блок, который может быть переопределен в дочернем шаблоне. Смотрите подробности в разделе о
наследовании шаблонов.
csrf_token
В Django 1.1.X, это ничего не делающий тег, который возвращает пустую строку, добавленный для совместимости версий. В Django 1.2 и выше, используется для CSRF защиты, как описано в разделе о
Cross Site Request Forgeries.
cycle
Циклически перебирает переданные строки или значения каждый раз, когда выполняется тег.
В цикле, поочередно выводит строку переданную в тег:
Вы можете так же использовать переменные. Например, если у вас есть две переменных в шаблоне,
rowvalue1 и
rowvalue2, вы можете переключаться между их значениями:
Обратите внимание, что переменные используемые в качестве аргументов (
rowvalue1 и
rowvalue2 из примера выше) НЕ будут экранированы! Так что или убедитесь, что вы доверяете переменным, или используйте явное экранирование, например:
В можете использовать переменные и строки вместе:
В некоторых случаях вам может понадобиться обратиться к значению не в цикле. Что бы сделать это, просто передайте в тег
{% cycle %} название, используя “as”, например:
Теперь вы можете использовать текущее значение цикла в любом месте шаблона используя переданное название как переменную контекста. Если вам необходимо следующее значение, используйте тег снова, используя название переменной. Следующий шаблон:
выведет:
Вы можете использовать любое количество значений в теге
{% cycle %}, разделенных пробелами. Значения в одинарных (
') или двойных кавычках (
") рассматриваются как строки, в то время как, значения без кавычек, интерпретируются как переменные.
Переменные не будут экранированы. Это потому, что теги не экранируют свое содержимое. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с защитой.
Для обратной совместимости, тег
{% cycle %} поддерживает старый синтаксис предыдущих версий Django. Вы не должны его использовать в новых проектах, но для тех кому интересно он выглядит таким образом:
Такой синтаксис воспринимает все как строки, и нет возможности передать переменные, использовать запятую или пробел в качестве значения. Мы уже говорили что не следует использовать этот синтаксис в новых проектах?
По-умолчанию, использование тега
{% cycle %} с аргументом
as выведет первое значение цикла. Это может быть проблемой, если вы хотите использовать значение во вложенном теге или в включенном теге. Если вы хотите просто определить цикл, но не выводить первое значение, используйте аргумент
silent в конце тега. Например:
Это выведет список элементов
<tr> с
class чередующийся между
row1 и
row2; включенный шаблон будет иметь доступ к переменной
rowcolors, которая содержит класс
<tr>. Если бы аргумент
silent не использовался,
row1 вывелся бы в элементе
<tr> как обычный тег.
Если используется аргумент
silent, он будет автоматически применен ко всем последующим вызовам этого цикла. Этот шаблон
ничего не выведет, даже учитывая что второй вызов
{% cycle %} не использует
silent:
debug
Выводит всю отладочную информацию, в том числе текущей контекст и импортированные модули.
extends
Указывает что данный шаблон наследуется от родительского.
Может использоваться двумя способами:
Смотрите подробности в
Наследование шаблонов.
filter
Применяет фильтры к содержимому блока.
Можно передавать группу фильтров и они могут содержать фильтры – синтаксис аналогичен выводу переменных в шаблоне.
Примеры использования:
firstof
Выводит первую из переданных переменных, которая не равна False. НЕ экранирует значения переменных.
Ничего не выводит, если все переменные равны False.
Примеры использования:
Это равносильно:
Вы можете использовать сроку как значение по-умолчанию на случай, если все переменные равны False:
Переменные не будут экранированы. Это потому, что теги не экранируют свое содержимое. Любой HTML или Javascript код в переменных будет выведен как есть, что может привести к проблемам с защитой. Если вам необходимо экранирование, используйте его явно:
for
Цикл по каждому элементу массива. Например, выведем список спортсменов из
athlete_list:
Вы можете использовать цикл по списку в обратном порядке
{% for obj in list reversed %}.
Если вам нужен цикл по списку списков, вы можете распаковать значения под-списка на отдельные переменные. Например, если ваш контекст содержит список (x,y) координат
points, вы можете использовать следующий код для их вывода:
Аналогично можно использовать словарь. Например, если ваш контекст содержит словарь
data, следующий код выведет ключи и значения словаря:
Внутри цикла доступные некоторые дополнительные переменные:
Переменная |
Описание |
forloop.counter |
Номер текущей итерации цикла начиная с 1 |
forloop.counter0 |
Номер текущей итерации цикла начиная с 0 |
forloop.revcounter |
Номер текущей итерации цикла начиная с конца с 1 |
forloop.revcounter0 |
Номер текущей итерации цикла начиная с конца с 0 |
forloop.first |
True, если это первая итерация |
forloop.last |
True, если это последняя итерация |
forloop.parentloop |
Для вложенных циклов, это “внешний” цикл. |
for ... empty
Тег for содержит необязательную часть {% empty %}, которая будет отображена, если список пуст или не найден:
Это эквивалентно, но короче, читабельней и возможно быстрее, такому коду:
if
Тег
{% if %} вычисляет переменную и если она равна “true” (то есть существует, не пустая и не равна “false”) выводит содержимое блока:
В примере выше, если
athlete_list не пустой, будет отображено количество спортсменов
{{ athlete_list|length }}.
Как вы можете видеть, тег
if может содержать один или несколько блоков `` {% elif %}``, так же как и блок
{% else %}, который будет выведен, если все предыдущие условия не верны. Все эти блоки не обязательны.
Тег
if теперь поддерживает блок
{% elif %}.
Булевы операторы
Тег
if может использовать
and,
or или
not:
Можно использовать
and и
or вместе, операция
and имеет больший приоритет чем
or, например:
будет интерпретировано как:
Использовать скобки в теге
if нельзя. Если вам нужно указать приоритет, используйте вложенные теги
if.
Тег
if может использовать операторы
==,
!=,
<,
>,
<=,
>= и
in которые работают таким образом:
Оператор ==
Равенство. Например:
Оператор !=
Неравенство. Например:
Оператор <
Меньше чем. Например:
Оператор >
Больше чем. Например:
Оператор <=
Меньше чем или равно. Например:
Оператор >=
Больше чем или равно. Например:
Оператор in
Вхождение в. Этот оператор поддерживается большинством контейнеров Python, что бы проверит входит ли значение в контейнер. Несколько примеров как работает x in y:
Оператор not in
Не вхождение в. Оператор обратный оператору in.
Операторы сравнения не могут использовать вместе как в Python или математике. Например, вместо использования:
вы должны использовать:
Фильтры
Вы можете использовать фильтры в выражении
if. Например:
Сложные выражения
Все перечисленное выше может быть использовано вместе для создания сложных выражений. Для таких выражений, важно знать как операторы группируются при выполнении выражения - то есть, правила приоритета. Приоритет операторов, от низшего к высшему, выглядит следующим образом:
(Это точно повторяет Python). Таким образом, например, следующий сложный тег
if:
...будет интерпретирован как:
Если вам нужен другой приоритет, используйте вложенные теги
if. Иногда этот способ более понятен, во всяком случае, для тех, кто не знает правил приоритета.
ifchanged
Проверяет было ли изменено значение с предыдущей итерации цикла.
Блочный тег
{% ifchanged %} используется внутри цикла. Существует два способа использовать тег.
Тег
ifchanged может содержать не обязательный блок
{% else %}, который будет отображаться, если значение не изменилось:
ifequal
Выводит содержимое блока, если два аргумента равны
Например:
Как и в теге
if можно использовать не обязательный блок
{% else %}.
Аргументом может быть строка:
Вы можете сравнивать переменные шаблона или строки. Вы не можете сравнивать с объектами Python такими как
True или
False. Если вам нужно проверить что-то на истинность, используйте тег
if.
Добавлено в Django 1.2: An alternative to the
ifequal tag is to use the
if tag and the
== operator.
ifnotequal
Аналогичен тегу
ifequal, но проверяет аргументы на неравенство.
Добавлено в Django 1.2: An alternative to the
ifnotequal tag is to use the
if tag and
the
!= operator.
include
Загружает шаблон и выводит его с текущим контекстом. Это способ “включить” один шаблон в другой.
Названия шаблона можно указать переменной или строкой в одинарных или двойных кавычках.
Это пример включает содержимое шаблона
"foo/bar.html":
Этот пример включает содержимое шаблона, чье имя содержится в переменной
template_name:
Включенный шаблон выполняется с контекстом шаблона, который его включает. Этот пример выводит
"Hello, John":
Изменено в Django 1.3: Additional context and exclusive context.
Вы можете передать дополнительные переменные контекста в шаблон используя именованные аргументы:
Если вы хотите выполнить шаблон используя только указанные переменные в контексте (или не используя переменные совсем), добавите параметр
only:
Смотрите так же:
{% ssi %}.
load
Загружает библиотеку тегов.
Например, следующий шаблон загрузил бы все теги и фильтры зарегистрированные в
somelibrary и
otherlibrary который находится в пакете
package:
Вы можете так же загрузить определенные теги и фильтры из библиотеки, используя аргумент
from. В этом примере, шаблонные теги/фильтры
foo и
bar будут загружены с
somelibrary:
Смотрите раздел о
собственных библиотеках фильтров и тегов.
now
Отображает текущую дату и/или время, используя формат соответственно переданной строке. Эта строка может содержать символы форматирования описанные в разделе о фильтре
date.
Например:
Вы можете экранировать символ форматирования с помощью слэша, что бы использовать его как строку. В этом примере, “f” экранирован, т.к. в другом случае “f” будет использован как строка форматирования отображающая время. Символ “o” не экранирован т.к. это не символ форматирования:
Этот пример выведет “It is the 4th of September”.
regroup
Группирует объекты по общему атрибуту.
Этот сложный тег лучше всего объяснить с помощью примера:
people – список людей представленный словарями с ключами
first_name,
last_name и
gender:
...и вам нужно отобразить список отсортированный по полу:
Вы можете использовать тег
{% regroup %} что бы сгруппировать список по полу(gender). Следующий шаблон делает это:
Давайте изучим этот пример.
{% regroup %} принимает три аргумента: список, который вы хотите перегруппировать; атрибут, по которому нужно сгруппировать, и название переменной с результатами. В этом примере, мы перегруппируем список
people по атрибуту
gender и используем результат
gender_list.
{% regroup %} создает список (в нашем случае
gender_list) из
групп объектов. Каждый объект группы содержит два атрибута:
Заметим,
{% regroup %} не сортирует переданный список! Наш пример опирается на тот факт, что список
people был изначально отсортирован по
gender. Если элементы списка
people не были бы отсортированы по
gender, перегруппировка отобразила бы несколько групп для одного пола. Например, список
people был таким (заметьте, что мужчины не сгруппированы вместе):
В результате применения тега
{% regroup %} для списка выше получим такой результат:
Самый простой способ решить эту проблему удостоверится, что данные отсортированы так, как должны быть отображены.
Еще один способ отсортировать в шаблоне используя фильтр
dictsort, если ваши данные это список словарей:
Группировка по другим свойствам
Можно группировать объекты по методу, атрибуту, ключу словаря и списку объектов, в общем по всему, к чему можно получить доступ в шаблоне. Например, если “gender” это внешний ключ на модель с атрибутом “description,” вы можете использовать:
Или, если
gender это поле с
choices, будет доступен метод
django.db.models.Model.get_FOO_display() позволяя сгруппировать по отображаемым названиям, а не значениям
choices:
{{ gender.grouper }} теперь будет отображать значение поля, а не ключи
choices.
spaceless
Убирает пробелы между HTML тегами, включая символы табуляции и перенос строки.
Пример использования:
Этот пример вернет такой HTML:
Будут удалены пробелы только между тегами, и оставит между тегами и текстом. В этом примере пробелы вокруг Hello не будут удалены:
ssi
Выводит содержимое файла в шаблон.
Как и тег
include,
{% ssi %} добавляет содержимое другого файла, который должен быть указан через абсолютный путь, в текущий шаблон:
Если используется не обязательный параметр “parsed”, содержимое включаемого файла будет выполнено как код шаблона используя текущий контекст:
Если вы используете
{% ssi %}, определите параметр
ALLOWED_INCLUDE_ROOTS в настройках Django, в качестве меры безопасности.
Смотрите так же:
{% include %}.
templatetag
Выводит один из символов, которые используются для определения тегов.
Так как система шаблонов не поддерживает “экранирование”, для отображения элементов синтаксиса необходимо использовать тег
{% templatetag %}.
Аргумент указывает какой элемент синтаксиса отображать:
Аргумент |
Вывод |
openblock |
{% |
closeblock |
%} |
openvariable |
{{ |
closevariable |
}} |
openbrace |
{ |
closebrace |
} |
opencomment |
{# |
closecomment |
#} |
url
Возвращает абсолютную ссылку (URL без имени домена) соответствующую указанному представлению с необязательными аргументами. Этот способ выводить ссылки, без “хардкодинга” в шаблоне, что бы не нарушать принцип DRY:
Первый аргумент это путь к представлению в формате
package.package.module.function. Дополнительные аргументы не обязательны. Это значения разделенные пробелами, которые будут использоваться как аргументы при формировании URL. Пример выше использует позиционные аргументы. Так же можно использовать именованные аргументы:
Нельзя использовать и позиционные и именованные аргументы в одно теге. Все обязательные аргументы URLconf должны быть указаны.
Например, мы имеем представление,
app_views.client, чей URLconf принимает ID клиента (
client() это метод в файле
app_views.py). URLconf может выглядеть таким образом:
Если URLconf приложения добавлен в URLconf проекта:
...в шаблоне можно создать ссылку на представление:
Тег вернет такую строку
/clients/client/123/.
Если вы используете
именованные шаблоны URL, можно указать имя шаблона в теге
url вместо пути к представлению.
Если вы пытаетесь вывести URL который не существует, будет вызвано исключение
django.core.urlresolvers.NoReverseMatch, и ваш сайт покажет страницу с ошибкой.
Если вам нужно получить URL без его отображения:
Такой
{% url ... as var %} синтаксис
не вызовет исключение, если представление отсутствует. На практике вы будете использовать его для отображения ссылок на необязательные представления:
Если вы хотите использовать URL с указанным пространством имен, укажите полное имя:
Это приведет к использованию стандартной
стратегии разрешения пространств имен в URL, включая использование данных контекста для определения текущего приложения.
Для обратной совместимости, тег
{% url %} поддерживает старый синтаксис разделения аргументов запятыми. Вы не должны его использовать в новых проектах. Для тех, кому интересно, пример как он выглядит:
Этот синтаксис не поддерживает использование запятых и знака равно в аргументах.
widthratio
Для создания гистограмм и других графиков, этот тег вычисляет отношение переданного значения к максимальному, а затем умножает отношение на константу.
Например:
Если this_value равно 175 и max_value равно 200, изображение из примера выше будет шириной 88 пикселей (так как 175/200 = .875; .875 * 100 = 87.5 что приблизительно равно 88).
with
Изменено в Django 1.3: New keyword argument format and multiple variable assignments.
Кэширует сложные переменные под простым названием. Это полезно при использовании “тяжелых” методов (например, тех, которые выполняют запрос к базе данных) несколько раз.
Например:
Указанная переменная (в примере выше,
total) доступна только между тегами
{% with %} и
{% endwith %}.
Вы можете указать больше одной переменной контекста:
Список встроенных фильтров
add
Суммирует аргумент и значение.
Например:
Если
value равно
4, будет выведено
6.
Изменено в Django 1.2: The following behavior didn’t exist in previous Django versions.
Фильтр попытается преобразовать оба значения в целое число. Если это не удастся, он будет пытаться добавить значения в любом случае. Это работает для некоторых типов (строки, списки и др.) и не работает с другими. Если ничего не получится, будет выведена пустая строка.
Например, у нас есть:
и
first равно
[1, 2, 3] и
second равно
[4, 5, 6], тогда результат будет
[1, 2, 3, 4, 5, 6].
addslashes
Добавляет слэш перед кавычкой. Удобно при экранировании строк в CSV, например.
Например:
Если value равно "I'm using Django", результат будет "I\'m using Django".
capfirst
Делает заглавным первый символ значения.
Например:
Если value равно "django", результат будет "Django".
center
Центрирует значение в поле заданной ширины.
Например:
Если value равно "django", результат будет " Django ".
cut
Удаляет значение аргумента из строки, к которой применяется фильтр.
Например:
Если value равно "String with spaces", результат будет "Stringwithspaces".
date
Форматирует дату в соответствии с указанным форматом.
Использует формат функции
date() в PHP (
http://php.net/date) с небольшими отличиями.
Доступное форматирование:
Символ форматирования |
Описание |
Пример вывода |
a |
'a.m.' или 'p.m.' (немного отличается от функции PHP, так как отображает в стиле Associated Press.) |
'a.m.' |
A |
'AM' или 'PM'. |
'AM' |
b |
Название месяца, 3-х буквенное, в нижнем регистре. |
'jan' |
B |
Не используется. |
|
c |
ISO 8601 формат. (Заметим: в отличии от других форматов, таких как “Z”, “O” или “r”, формат “c” не добавит временную зону для относительного времени (смотрите datetime.tzinfo). |
2008-01-02T10:30:00.000123+02:00, или 2008-01-02T10:30:00.000123 если время относительное |
d |
День месяца, 2 цифры с ведущим нулем. |
От '01' до '31' |
D |
День недели, 3-х буквенное текстовое название. |
'Fri' |
e |
Название временной зоны. Может быть в любом формате, или вернуть пустую строку в зависимости от объекта даты. |
'', 'GMT', '-500', 'US/Eastern' и др. |
E |
Название месяца, зависит от текущего языка. Используется для отображения полного называния даты. |
'listopada' (для польского языка, не 'Listopad') |
f |
Время, час в 12-часовом формате и минуты, минуты не отображаются если равны нулю. Собственное расширение. |
'1', '1:30' |
F |
Название месяца, текстовое, длинное. |
'January' |
g |
Час, 12-часовом формате без ведущих нулей. |
От '1' до '12' |
G |
Час, 24-часовой формат |
От '0' до '23' |
h |
Час, 12-часовой формат. |
От '01' до '12' |
H |
Час, 24-часовой формат. |
От '00' до '23' |
i |
Минуты. |
От '00' до '59' |
I |
Не используется. |
|
j |
День месяца без ведущего нуля. |
От '1' до '31' |
l |
Название дня недели, текстовое, длинное. |
'Friday' |
L |
Булево значение указывающее високосный ли год. |
True или False |
m |
Месяц, 2-цифирный с ведущими нулями. |
От '01' до '12' |
M |
Название месяца, текстовое, 3-х буквенное. |
'Jan' |
n |
Номер месяца без ведущего нуля. |
От '1' до '12' |
N |
Аббревиатура названия месяца в формате Associated Press. Собственное расширение. |
'Jan.', 'Feb.', 'March', 'May' |
o |
week-numbering год в соответствии с ISO-8601 |
'1999' |
O |
Разница с временем по Гринвичу |
'+0200' |
P |
Время, в 12-часовом формате, минуты и ‘a.m.’/’p.m.’, минуты упускаются если равны нулю, значения ‘midnight’ и ‘noon’ используются по возможности. Собственное расширение. |
'1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.' |
r |
Дата в формате RFC 2822. |
'Thu, 21 Dec 2000 16:01:07 +0200' |
s |
Секунды, 2-цифирный формат без ведущих нулей. |
От '00' до '59' |
S |
Английский суффикс для дня месяца, 2 символа. |
'st', 'nd', 'rd' или 'th' |
t |
Количество дней в месяце. |
От 28 до 31 |
T |
Часовой пояс сервера. |
'EST', 'MDT' |
u |
микросекунды |
От 0 до 999999 |
U |
Секунды с начала эпохи Unix (1 января 1970 00:00:00 UTC). |
|
w |
Номер дня недели, без ведущих нулей. |
от '0' (воскресение) до '6' (субота) |
W |
Норме недели в году в соответствии с ISO-8601, первая неделя начинается с понедельника. |
1, 53 |
y |
Год, 2 цифры. |
'99' |
Y |
Год, 4 цифры. |
'1999' |
z |
Номер дня в году. |
От 0 до 365 |
Z |
Смещения часового пояса в секундах. Для часового пояса западнее UTC значение будет отрицательным, для тех, что восточнее UTC – положительным. |
От -43200 до 43200 |
Форматирование
c и
u добавлены в Django 1.2.
Форматирование
e и
o добавлены в Django 1.4.
Например:
Если
value равно объекту
datetime (например, результат выполнения
datetime.datetime.now()), будет выведено значение
'Wed 09 Jan 2008'.
Переданный формат может быть одним из предопределенных(
DATE_FORMAT,
DATETIME_FORMAT,
SHORT_DATE_FORMAT или
SHORT_DATETIME_FORMAT) или любой другой сформированный из символов форматирования из таблицы выше. Предопределенные форматы зависят от текущего языка и настройки
Формат локализации, например:
Предположим что
USE_L10N равно
True и
LANGUAGE_CODE равно
"es", тогда:
результат вывода будет
"09/01/2008" (формат
"SHORT_DATE_FORMAT" для языка
es указан в Django как
"d/m/Y").
Если форматирование не указано:
...будет использовано значение из настройки
DATE_FORMAT без учета текущего языка.
Изменено в Django 1.2: Predefined formats can now be influenced by the current locale.
default
Если значение равно False, будет использовано значение по-умолчанию. В противном случае используется значение.
Например:
Если value равно "" (пустая строка), будет выведено nothing.
default_if_none
Если (и только в этом случае) значение равно
None, будет использовано значение по-умолчанию. В противном случае используется значение.
Заметим, если передана пустая строка, значение по-умолчанию
не будет использовано. Используйте фильтр
default, если нужно учитывать пустую строку.
Например:
Если
value равно
None, будет выведено
"nothing".
dictsort
Принимает список словарей и возвращает список отсортированный по указанному ключу.
Например:
Если value равно:
будет возвращено:
dictsortreversed
Принимает список словарей и возвращает список отсортированный по указанному ключу в обратном порядке. Работает аналогично фильтру выше, но возвращает список в обратном порядке.
divisibleby
Возвращает True, если значение делится на аргумент.
Например:
Если value равно 21, будет возвращено True.
escape
Экранирует HTML. В частности выполняются такие замены:
Экранирование применяется к выводимой строке, и нет разницы где в цепочке фильтров будет добавлен
escape: он всегда будет применяться так, как будто это последний фильтр. Если экранирование необходимо сразу применить, используйте фильтр
force_escape.
Применение
escape к переменной, которая уже была экранирована с помощью авто-экранирования, безопасно. Будет применено только одно экранирование. Так что безопасно использовать его с авто-экранированием. Если вам нужно применить экранирование несколько раз, используйте
force_escape.
escapejs
Экранирует символы в строке, используемой в JavaScript. Это не делает сроку безопасной для использования в HTML, но защищает от синтаксических ошибок при генерации JavaScript/JSON.
Например:
Если value равно "testing\r\njavascript \'string" <b>escaping</b>", будет выведено "testing\\u000D\\u000Ajavascript \\u0027string\\u0022 \\u003Cb\\u003Eescaping\\u003C/b\\u003E".
filesizeformat
Форматирует размер файла в читабельном формате (например. '13 KB', '4.1 MB', '102 bytes' и др.).
Например:
Если value равно 123456789, будет выведено 117.7 MB.
first
Возвращает первый элемент списка.
Например:
Если value равно ['a', 'b', 'c'], будет возвращено 'a'.
fix_ampersands
Заменяет амперсанд &.
Например:
Если value равно Tom & Jerry, будет возвращено Tom & Jerry.
Однако, амперсанд в словах не будет заменен. Например, если value равно Café, вывод будет не Caf&eacute; а останется Café. Это означает, что в некоторых случаях, например сокращение с последующей точкой с запятой, фильтр не заменит амперсанд. Например, если value равно Contact the R&D;, вывод будет без замены &D;.
force_escape
Применяет экранирование HTML к строке (смотрите
escape). Это фильтр применяется
сразу и возвращает новую экранированную строку. Это полезно в редких случаях, если вам необходимо применить экранирование несколько раз, или если необходимо применить другие фильтры в экранированной строке.
get_digit
Принимает число и возвращает запрашиваемую цифру, где 1 самая правая цифра, 2 - вторая с права, и тд. Возвращает оригинальное значение, если оно не верно (не число или меньше 1). В противном случае, всегда выводится целое число.
Например:
Если value равно 123456789, будет выведено 8.
iriencode
Конвертирует IRI (Internationalized Resource Identifier) в строку, которая может быть использована в URL. Это необходимо, если вы хотите использовать не ASCII символы в URL.
Можно использовать этот фильтр после использования фильтра
urlencode.
Например:
Если
value равно
"?test=1&me=2", вывод будет
"?test=1&me=2".
join
Объединяет список используя указанную строку, аналог str.join(list) в Python
Например:
Если value равно списку ['a', 'b', 'c'], вывод будет "a // b // c".
last
Возвращает последний элемент списка.
Например:
Если value равно ['a', 'b', 'c', 'd'], выведет "d".
length
Возвращает размер значения. Работает для строк и списков.
Например:
Если value равно ['a', 'b', 'c', 'd'], выведет 4.
length_is
Возвращает True, если размер значения равен аргументу, и False в противном случае.
Например:
Если value равно ['a', 'b', 'c', 'd'], вернет True.
linebreaks
Заменяет переносы строки аналогами из HTML; один перенос строки будет заменен на <br />, новая строка с предыдущей пустой строкой оборачиваются в тег </p>.
Например:
Если value равно Joel\nis a slug, вывод будет <p>Joel<br />is a slug</p>.
linebreaksbr
Заменяет все переносы строки на <br />.
Например:
Если value равно Joel\nis a slug, вывод будет Joel<br />is a slug.
linenumbers
Отображает текст с номерами строк.
Например:
Если value равно:
вернет:
ljust
Выравнивает значение влево в поле указанной ширины.
Аргумент: размер поля
Например:
Если value равно Django, выведет "Django ".
lower
Конвертирует строку в нижний регистр.
Например:
Если value равно Still MAD At Yoko, выведет still mad at yoko.
make_list
Превращает значение в список. Для строк это будет список символов. Число сначала конвертируется в unicode, а потом в список.
Например:
Если value равно строке "Joel", будет возвращен список [u'J', u'o', u'e', u'l']. Если value равно 123, вернет список [u'1', u'2', u'3'].
phone2numeric
Преобразует телефонный номер (возможно, содержащий буквы) в его числовой эквивалент.
Значение не должно быть правильным телефонным номером, будет преобразована любая строка.
Например:
Если value равно 800-COLLECT, выведет 800-2655328.
pluralize
Возвращает суффикс множественного числа, если значение не 1. По-умолчанию использует суффикс 's'.
Например:
Если num_messages равно 1, выведет You have 1 message. Если num_messages равно 2 выведет You have 2 messages.
Для слов, которые используют суффикс отличный от 's', вы можете указать его как аргумент.
Например:
Для слов, которые не преобразуются в множественную форму добавлением суффикса, вы можете указать как одинарный так и множественный суффиксы, разделенные запятыми.
Например:
random
Возвращает случайный элемент из списка.
Например:
Если value равно ['a', 'b', 'c', 'd'], вернет "b".
removetags
Удаляет [X]HTML теги. Теги указываются через пробел в качестве аргументов.
Например:
Если value равно "<b>Joel</b> <button>is</button> a <span>slug</span>", будет возвращено "Joel <button>is</button> a slug".
Этот фильтр регистрозависимый.
Если value равно "<B>Joel</B> <button>is</button> a <span>slug</span>", будет выведено "<B>Joel</B> <button>is</button> a slug".
rjust
Выравнивает значение вправо в поле указанной ширины.
Аргумент: размер поля
Например:
Если value равно Django, вернет " Django".
safe
Помечает строку, как требующую последующего HTML экранирования. Если авто-экранирование отключено, этот фильтр ничего не изменит.
safeseq
Применяет фильтр
safe к каждому элементу последовательности. Полезно применять с другими тегами работающими с последовательностями, такими как
join. Например:
Вы не можете использовать фильтр
safe в таком случае, так как он сначала преобразует значение в строку.
slugify
Конвертирует в нижний регистр, удаляет нетекстовые символы (все кроме букв, цифр и символов подчеркивания) и преобразует пробелы в дефисы. Так же удаляет пробелы в начале и в конце строки.
Например:
Если value равно "Joel is a slug", вернет "joel-is-a-slug".
striptags
Удаляет все [X]HTML теги.
Например:
Если value равно "<b>Joel</b> <button>is</button> a <span>slug</span>", выведет "Joel is a slug".
time
Форматирует время в соответствии с указанным форматом.
Можно использовать предопределенный
TIME_FORMAT, или собственный формат аналогичный формату описанному в
date. Заметим, что предопределенный формат зависит от текущего языка.
Фильтр принимает только параметры в строке формата, которые относятся к времени, а не дате (по понятным причинам). Если вам нужно отформатировать дату, используйте фильтр
date.
Например:
Если
value равно
datetime.datetime.now(), может вернуть
"01:23".
Другой пример:
Предположим
USE_L10N равно
True и
LANGUAGE_CODE равно
"de", тогда:
будет возвращена строка
"01:23:00" (формат
"TIME_FORMAT" для языка
de определен в Django как
"H:i:s").
Если форматирование не указано:
...будет использовано значение из настройки
TIME_FORMAT без учета текущего языка.
Изменено в Django 1.2: Predefined formats can now be influenced by the current locale.
timesince
Форматирует дату как время прошедшее с момента другой даты (например, “4 days, 6 hours”).
Принимает не обязательный аргумент – дату, используемую как точку отсчета (без аргументов используется текущее время). Например, если blog_date это дата, равная полночи 1 июня 2006, и comment_date равен 08:00, 1 июня 2006, тогда {{ blog_date|timesince:comment_date }} вернет “8 часа”.
Сравнение абсолютной(с временной зоной) и относительной(без временной зоны) дат вернет пустую строку.
Минута - самая малая единица измерения, и для дат из будущего, относительно точки сравнения, возвращается “0 минут” .
timeuntil
Аналогичен timesince, только определяет время от текущей даты до указанной. Например, если сегодня 1 июня 2006 и conference_date это дата 29 июня 2006, тогда {{ conference_date|timeuntil }} вернет “4 недели”.
Принимает не обязательный аргумент – дату, используемую как точку отсчета (вместо текущего времени). Если from_date содержи 22 июня 2006, тогда {{ conference_date|timeuntil:from_date }} вернет “1 неделя”.
Сравнение абсолютной(с временной зоной) и относительной(без временной зоны) дат вернет пустую строку.
Минута - самая малая единица измерения, и для дат из прошлого, относительно точки сравнения, возвращается “0 минут” .
title
Конвертирует строку в заголовок
Например:
Если value равно "my first post", вернет "My First Post".
truncatechars
Обрезает строку до указанной длины. Обрезанная строка будет оканчиваться троеточием(”...”).
Аргумент: длинна строки в символах
Например:
Если
value равно
"Joel is a slug", вернет
"Joel i...".
truncatewords
Обрезает строку после указанного количества слов.
Аргумент: количество слов в строке
Например:
Если value равно "Joel is a slug", вернет "Joel is ...".
Переносы строки будут удалены.
truncatewords_html
Аналогичен
truncatewords, но учитывает наличие HTML тегов. Теги, которые остались открыты в стоке после обрезания, будут немедленно закрыты.
Этот фильтр менее эффективен чем
truncatewords, используйте его только с HTML-текстом.
Например:
Если
value равно
"<p>Joel is a slug</p>", вернет
"<p>Joel is ...</p>".
Символы новой строки в содержимом будут сохранены.
unordered_list
Принимает вложенный список и возвращает неупорядоченный HTML список – БЕЗ открывающего и закрывающего <ul> тегов.
Предполагается, что список находится в нужном формате. Например, если var равен ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], тогда {{ var|unordered_list }} вернет:
Заметка: старый, более строгий и подробный формат, так же поддерживается: ['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]],
upper
Конвертирует строку в верхний регистр
Например:
Если value равно "Joel is a slug", будет возвращено "JOEL IS A SLUG".
urlencode
Экранирует значение для безопасного использования в URL.
Например:
Если
value равно
"http://www.example.org/foo?a=b&c=d", будет возвращено
"http%3A//www.example.org/foo%3Fa%3Db%26c%3Dd".
Используй не обязательный аргумент, можно указать символы, который не должны быть экранированы.
Если аргумент не указан, символ ‘/’ предполагается как безопасный символ. Если необходимо экранировать
все символы, передайте пустую строку. Например:
Если
value равно
"http://www.example.org/", будет возвращено
"http%3A%2F%2Fwww.example.org%2F".
urlize
Конвертирует URL-ы в тексте в “кликабельные” ссылки.
Этот тег конвертирует ссылки с префиксами
http://,
https://, или
www.. Например,
http://goo.gl/aia1t будет конвертирован,
goo.gl/aia1t – нет.
Так же поддерживаются ссылки состоящие только из домена и заканчивающиеся на один из первоначальных доменов первого уровня (
.com,
.edu,
.gov,
.int,
.mil,
.net, and
.org). Например,
djangoproject.com будет преобразован.
До Django 1.4, поддерживались только суффиксы
.com,
.net and
.org.
Ссылки могут быть с завершающей пунктуацией (точка, запятая, закрывающая скобка) и предшествующей пунктуацией (открывающая скобка),
urlize все корректно преобразует.
Ссылки созданные
urlize содержат атрибут
rel="nofollow".
Например:
Если
value равно
"Check out www.djangoproject.com", будет выведено
"Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>".
Фильтр
urlize принимает не обязательный аргумент
autoescape. Если
autoescape равен
True, текст ссылки и URL будут экранированы с помощью фильтра
escape. Значение по-умолчанию для
autoescape равно
True.
urlizetrunc
Преобразует URL-ы в ссылки как и
urlize, но обрезает название ссылок длиннее указанного предела.
Аргумент: Максимальное количество символов в названии ссылки, включая троеточие добавленное при обрезании текста.
Например:
Если
value равно
"Check out www.djangoproject.com", вернет
'Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangopr...</a>'.
Как и
urlize, фильтр следует применять к обычному тексту.
wordcount
Возвращает количество слов.
Например:
Если value равно "Joel is a slug", верент 4.
wordwrap
“Оборачивает” слова до указанной длинны строки.
Аргумент: количество символов в строке
Например:
Если value равно Joel is a slug, вернет:
yesno
Для true, false и (опционально) None выводит строки “yes”, “no”, “maybe”, или другие, переданные как список значений, разделенный запятыми:
Например:
Значение |
Аргумент |
Вывод |
True |
|
yes |
True |
"yeah,no,maybe" |
yeah |
False |
"yeah,no,maybe" |
no |
None |
"yeah,no,maybe" |
maybe |
None |
"yeah,no" |
"no" (конвертирует None в False если значение для None не указано) |