Встроенные теги и фильтры шаблонов ¶
Этот документ описывает встроенные теги и фильтры шаблонов Django. Рекомендуется использовать автоматическую документацию , если таковая имеется, поскольку она также будет включать документацию по любым установленным настраиваемым тегам или фильтрам.
Справочник по встроенным тегам ¶
autoescape
¶
Управляет текущим автоматическим экранированием. Этот тег принимает либо, on
либо
off
в качестве аргумента, и он определяет, действует ли автоматическое экранирование внутри блока. Блок закрывается endautoescape
закрывающим тегом.
Когда действует автоматическое экранирование, ко всему содержимому переменных применяется экранирование HTML перед помещением результата в вывод (но после применения любых фильтров). Это эквивалентно применению escape
фильтра к каждой переменной вручную .
Единственными исключениями являются переменные, которые уже помечены как «безопасные» от экранирования, либо кодом, который заполняет переменную, либо потому, что к ней применены фильтры safe
или escape
.
Пример использования:
{% autoescape on %}
{{ body }}
{% endautoescape %}
block
¶
Определяет блок, который может быть переопределен дочерними шаблонами. См. Раздел « Наследование шаблонов» для получения дополнительной информации.
comment
¶
Игнорирует все, что находится между и . Необязательное примечание может быть вставлено в первый тег. Например, это полезно при комментировании кода для документирования того, почему код был отключен.{% comment %}
{% endcomment %}
Пример использования:
<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
<p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}
comment
теги не могут быть вложенными.
csrf_token
¶
Этот тег используется для защиты CSRF, как описано в документации для подделок межсайтовых запросов .
cycle
¶
Производит один из своих аргументов каждый раз, когда встречается этот тег. Первый аргумент возникает при первой встрече, второй аргумент - при второй встрече и так далее. Как только все аргументы исчерпаны, тег циклически переходит к первому аргументу и производит его снова.
Этот тег особенно полезен в цикле:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
Первая итерация создает HTML, который относится к классу row1
, вторая - к
row2
, третья - row1
снова и так далее для каждой итерации цикла.
Вы также можете использовать переменные. Например, если у вас есть две переменные шаблона
rowvalue1
и rowvalue2
, вы можете чередовать их значения следующим образом:
{% for o in some_list %}
<tr class="{% cycle rowvalue1 rowvalue2 %}">
...
</tr>
{% endfor %}
Переменные, включенные в цикл, будут экранированы. Вы можете отключить автоматическое экранирование с помощью:
{% for o in some_list %}
<tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}">
...
</tr>
{% endfor %}
Вы можете смешивать переменные и строки:
{% for o in some_list %}
<tr class="{% cycle 'row1' rowvalue2 'row3' %}">
...
</tr>
{% endfor %}
В некоторых случаях вы можете захотеть обратиться к текущему значению цикла, не переходя к следующему значению. Для этого дайте тегу имя, используя «как», например:{% cycle %}
{% cycle 'row1' 'row2' as rowcolors %}
С этого момента вы можете вставить текущее значение цикла в любое место вашего шаблона, указав имя цикла как контекстную переменную. Если вы хотите переместить цикл к следующему значению независимо от исходного
cycle
тега, вы можете использовать другой cycle
тег и указать имя переменной. Итак, следующий шаблон:
<tr>
<td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
<tr>
<td class="{% cycle rowcolors %}">...</td>
<td class="{{ rowcolors }}">...</td>
</tr>
выведет:
<tr>
<td class="row1">...</td>
<td class="row1">...</td>
</tr>
<tr>
<td class="row2">...</td>
<td class="row2">...</td>
</tr>
В cycle
теге можно использовать любое количество значений , разделенных пробелами. Значения, заключенные в одинарные кавычки ( '
) или двойные кавычки ( "
), обрабатываются как строковые литералы, а значения без кавычек обрабатываются как переменные шаблона.
По умолчанию, когда вы используете as
ключевое слово с тегом цикла, использование того, что запускает цикл, само произведет первое значение в цикле. Это может быть проблемой, если вы хотите использовать значение во вложенном цикле или во включенном шаблоне. Если вы хотите только объявить цикл, но не вывести первое значение, вы можете добавить
ключевое слово в качестве последнего ключевого слова в теге. Например:{% cycle %}
silent
{% for obj in some_list %}
{% cycle 'row1' 'row2' as rowcolors silent %}
<tr class="{{ rowcolors }}">{% include "subtemplate.html" %}</tr>
{% endfor %}
Это выведет список <tr>
элементов с class
чередованием между row1
и row2
. Подшаблон будет иметь доступ rowcolors
в своем контексте, а значение будет соответствовать классу, <tr>
который его включает. Если бы silent
ключевое слово было опущено row1
и row2
было бы выдано как обычный текст вне
<tr>
элемента.
Когда ключевое слово silent используется в определении цикла, тишина автоматически применяется ко всем последующим использованиям этого конкретного тега цикла. Следующий шаблон ничего не выведет , даже если второй вызов не указывает :{% cycle %}
silent
{% cycle 'row1' 'row2' as rowcolors silent %}
{% cycle rowcolors %}
Вы можете использовать resetcycle
тег, чтобы перезапустить тег с его первого значения, когда оно встретится в следующий раз.{% cycle %}
debug
¶
Выводит полный набор отладочной информации, включая текущий контекст и импортированные модули.
extends
¶
Сигнализирует, что этот шаблон расширяет родительский шаблон.
Этот тег можно использовать двумя способами:
{% extends "base.html" %}
(в кавычках) использует буквальное значение"base.html"
в качестве имени расширяемого родительского шаблона.{% extends variable %}
использует значениеvariable
. Если переменная вычисляется как строка, Django будет использовать эту строку как имя родительского шаблона. Если переменная оценивается какTemplate
объект, Django будет использовать этот объект в качестве родительского шаблона.
См. Раздел « Наследование шаблонов» для получения дополнительной информации.
Обычно имя шаблона указывается относительно корневого каталога загрузчика шаблонов. Строковый аргумент также может быть относительным путем, начинающимся с ./
или ../
. Например, предположим следующую структуру каталогов:
dir1/
template.html
base2.html
my/
base3.html
base1.html
В template.html
, допустимы следующие пути:
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
filter
¶
Фильтрует содержимое блока с помощью одного или нескольких фильтров. С помощью конвейеров можно указать несколько фильтров, а фильтры могут иметь аргументы, как и в синтаксисе переменных.
Обратите внимание , что блок включает в себя весь текст между filter
и
endfilter
тегами.
Пример использования:
{% filter force_escape|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}
Примечание
escape
И safe
фильтры не являются приемлемыми аргументами. Вместо этого используйте autoescape
тег для управления автоматическим экранированием блоков кода шаблона.
firstof
¶
Выводит первую переменную аргумента, которая не является «ложной» (т.е. существует, не пуста, не является ложным логическим значением и не является нулевым числовым значением). Ничего не выдает, если все переданные переменные - «ложь».
Пример использования:
{% firstof var1 var2 var3 %}
Это эквивалентно:
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
Вы также можете использовать буквальную строку в качестве резервного значения, если все переданные переменные имеют значение False:
{% firstof var1 var2 var3 "fallback value" %}
Этот тег автоматически экранирует значения переменных. Вы можете отключить автоматическое экранирование с помощью:
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
Или, если нужно экранировать только некоторые переменные, вы можете использовать:
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
Вы можете использовать синтаксис для сохранения вывода внутри переменной.{% firstof var1 var2 var3 as value %}
for
¶
Зацикливается на каждом элементе в массиве, делая элемент доступным в переменной контекста. Например, чтобы отобразить список спортсменов, представленный в
athlete_list
:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
Вы можете перебирать список в обратном порядке, используя
.{% for obj in list reversed %}
Если вам нужно перебрать список списков, вы можете распаковать значения в каждом подсписке в отдельные переменные. Например, если ваш контекст содержит список вызываемых координат (x, y) points
, вы можете использовать следующее для вывода списка точек:
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}
Это также может быть полезно, если вам нужно получить доступ к элементам в словаре. Например, если ваш контекст содержит словарь data
, следующее будет отображать ключи и значения словаря:
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
Имейте в виду, что для оператора точки поиск ключа словаря имеет приоритет над поиском метода. Поэтому , если data
словарь содержит ключ с именем
'items'
, data.items
будет возвращать data['items']
вместо
data.items()
. Избегайте добавление ключей, которые называются как словарные методы , если вы хотите использовать эти методы в шаблоне ( items
, values
, keys
и т.д.). Дополнительные сведения о порядке поиска оператора точки см. В
документации переменных шаблона .
Цикл for устанавливает ряд переменных, доступных в цикле:
Переменная | Описание |
---|---|
forloop.counter |
Текущая итерация цикла (с индексом 1) |
forloop.counter0 |
Текущая итерация цикла (с индексом 0) |
forloop.revcounter |
Количество итераций с конца цикла (с индексом 1) |
forloop.revcounter0 |
Количество итераций с конца цикла (с индексом 0) |
forloop.first |
Верно, если это первый раз в цикле |
forloop.last |
Истинно, если это последний раз в цикле |
forloop.parentloop |
Для вложенных циклов это цикл, окружающий текущий. |
for
… empty
¶
for
Тег может иметь дополнительный пункт, текст отображается , если данный массив пуст или не может быть найден:{% empty %}
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
Вышеупомянутое эквивалентно - но короче, чище и, возможно, быстрее - следующему:
<ul>
{% if athlete_list %}
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
{% else %}
<li>Sorry, no athletes in this list.</li>
{% endif %}
</ul>
if
¶
Тег оценивает переменную, и если эта переменная является «истинным» (т.е. существует, не пустая, а не ложное логическое значение) содержимое блока выводится:{% if %}
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
В приведенном выше примере, если athlete_list
не пусто, количество спортсменов будет отображаться переменной.{{ athlete_list|length }}
Как видите, if
тег может принимать одно или несколько
предложений, а также предложение, которое будет отображаться, если все предыдущие условия не пройдут. Эти пункты не являются обязательными.{% elif %}
{% else %}
Булевы операторы ¶
if
теги могут использовать and
, or
или not
для проверки ряда переменных, или для отрицания данной переменной:
{% if athlete_list and coach_list %}
Both athletes and coaches are available.
{% endif %}
{% if not athlete_list %}
There are no athletes.
{% endif %}
{% if athlete_list or coach_list %}
There are some athletes or some coaches.
{% endif %}
{% if not athlete_list or coach_list %}
There are no athletes or there are some coaches.
{% endif %}
{% if athlete_list and not coach_list %}
There are some athletes and absolutely no coaches.
{% endif %}
Использование обоих and
и or
положений в пределах одного тега допускается,
and
имеющие более высокий приоритет , чем , or
например:
{% if athlete_list and coach_list or cheerleader_list %}
будет интерпретироваться как:
if (athlete_list and coach_list) or cheerleader_list
Использование настоящих круглых скобок в if
теге является недопустимым синтаксисом. Если вам нужно, чтобы они указывали приоритет, вы должны использовать вложенные if
теги.
if
теги могут также использовать операторы ==
, !=
, <
, >
,
<=
, >=
, in
, , , и которые работают следующим образом :not in
is
is not
==
оператор ¶
Равенство. Пример:
{% if somevar == "x" %}
This appears if variable somevar equals the string "x"
{% endif %}
!=
оператор ¶
Неравенство. Пример:
{% if somevar != "x" %}
This appears if variable somevar does not equal the string "x",
or if somevar is not found in the context
{% endif %}
<
оператор ¶
Меньше, чем. Пример:
{% if somevar < 100 %}
This appears if variable somevar is less than 100.
{% endif %}
>
оператор ¶
Больше чем. Пример:
{% if somevar > 0 %}
This appears if variable somevar is greater than 0.
{% endif %}
<=
оператор ¶
Меньше или равно. Пример:
{% if somevar <= 100 %}
This appears if variable somevar is less than 100 or equal to 100.
{% endif %}
>=
оператор ¶
Больше или равно. Пример:
{% if somevar >= 1 %}
This appears if variable somevar is greater than 1 or equal to 1.
{% endif %}
in
оператор ¶
Содержащиеся в. Этот оператор поддерживается многими контейнерами Python, чтобы проверить, находится ли данное значение в контейнере. Ниже приведены некоторые примеры того, как будет интерпретироваться:x in y
{% if "bc" in "abcdef" %}
This appears since "bc" is a substring of "abcdef"
{% endif %}
{% if "hello" in greetings %}
If greetings is a list or set, one element of which is the string
"hello", this will appear.
{% endif %}
{% if user in users %}
If users is a QuerySet, this will appear if user is an
instance that belongs to the QuerySet.
{% endif %}
not in
оператор ¶
Не содержится внутри. Это отрицание in
оператора.
is
оператор ¶
Идентичность объекта. Проверяет, являются ли два значения одним и тем же объектом. Пример:
{% if somevar is True %}
This appears if and only if somevar is True.
{% endif %}
{% if somevar is None %}
This appears if somevar is None, or if somevar is not found in the context.
{% endif %}
is not
оператор ¶
Отрицательная идентичность объекта. Проверяет, не являются ли два значения одним и тем же объектом. Это отрицание is
оператора. Пример:
{% if somevar is not True %}
This appears if somevar is not True, or if somevar is not found in the
context.
{% endif %}
{% if somevar is not None %}
This appears if and only if somevar is not None.
{% endif %}
Фильтры ¶
Вы также можете использовать фильтры в if
выражении. Например:
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
Сложные выражения ¶
Все вышеперечисленное можно комбинировать для образования сложных выражений. Для таких выражений может быть важно знать, как группируются операторы при вычислении выражения, то есть правила приоритета. Приоритет операторов, от низшего к высшему, следующий:
or
and
not
in
==
,!=
,<
,>
,<=
,>=
(Это в точности соответствует Python). Так, например, следующий сложный
if
тег:
{% if a == b or c == d and e %}
… Будет интерпретироваться как:
(a == b) or ((c == d) and e)
Если вам нужен другой приоритет, вам нужно будет использовать вложенные if
теги. Иногда это лучше для ясности, для тех, кто не знает правил приоритета.
Операторы сравнения не могут быть связаны, как в Python или в математической нотации. Например, вместо использования:
{% if a > b > c %} (WRONG)
вы должны использовать:
{% if a > b and b > c %}
ifequal
и ifnotequal
¶
Не рекомендуется, начиная с версии 3.1.
{% ifequal a b %} ... {% endifequal %}
это устаревший способ записи
. Аналогичным образом заменяется на .{% if a == b %} ... {% endif %}
{% ifnotequal a b %} ...
{% endifnotequal %}
{% if a != b %} ... {% endif %}
ifchanged
¶
Проверьте, изменилось ли значение с последней итерации цикла.
Блок - тег используется в цикле. У него есть два возможных использования.{% ifchanged %}
Проверяет собственное отображаемое содержимое на соответствие его предыдущему состоянию и отображает содержимое только в том случае, если оно изменилось. Например, здесь отображается список дней, а месяц отображается только в случае его изменения:
<h1>Archive for {{ year }}</h1> {% for date in days %} {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %} <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a> {% endfor %}
Если задана одна или несколько переменных, проверьте, не изменилась ли какая-либо переменная. Например, следующее показывает дату каждый раз, когда она изменяется, и показывает час, если час или дата изменились:
{% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} {% ifchanged date.hour date.date %} {{ date.hour }} {% endifchanged %} {% endfor %}
ifchanged
Тег может также принимать необязательный пункт , который будет отображаться , если значение не изменилось:{% else %}
{% for match in matches %}
<div style="background-color:
{% ifchanged match.ballot_id %}
{% cycle "red" "blue" %}
{% else %}
gray
{% endifchanged %}
">{{ match }}</div>
{% endfor %}
include
¶
Загружает шаблон и отображает его с текущим контекстом. Это способ «включения» других шаблонов в шаблон.
Имя шаблона может быть переменной или жестко закодированной (заключенной в кавычки) строкой в одинарных или двойных кавычках.
Этот пример включает содержимое шаблона "foo/bar.html"
:
{% include "foo/bar.html" %}
Обычно имя шаблона указывается относительно корневого каталога загрузчика шаблонов. Строковый аргумент также может быть относительным путем, начинающимся с тега ./
или ../
описанным в нем extends
.
Этот пример включает содержимое шаблона, имя которого содержится в переменной template_name
:
{% include template_name %}
Переменная также может быть любым объектом с render()
методом, принимающим контекст. Это позволяет вам ссылаться на скомпилированный Template
в вашем контексте.
Кроме того, переменная может быть повторением имен шаблонов, и в этом случае будет использоваться первая, которая может быть загружена, в соответствии с
select_template()
.
Включенный шаблон отображается в контексте шаблона, который его включает. Этот пример дает результат :"Hello, John!"
Контекст: для переменной
person
установлено значение,"John"
а для переменнойgreeting
установлено значение"Hello"
.Шаблон:
{% include "name_snippet.html" %}
name_snippet.html
Шаблон:{{ greeting }}, {{ person|default:"friend" }}!
Вы можете передать дополнительный контекст в шаблон, используя аргументы ключевого слова:
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
Если вы хотите отображать контекст только с предоставленными переменными (или даже без переменных), используйте эту only
опцию. Для включенного шаблона нет других переменных:
{% include "name_snippet.html" with greeting="Hi" only %}
Примечание
include
Тег следует рассматривать как реализацию «делает это subtemplate и включает в себя HTML», а не как «разобрать этот subtemplate и включить его содержимое , как если бы она была частью родительского». Это означает, что между включенными шаблонами нет общего состояния - каждое включение - это полностью независимый процесс рендеринга.
Перед включением блоки оцениваются . Это означает, что шаблон, который включает блоки из другого, будет содержать блоки, которые уже были оценены и визуализированы, а не блоки, которые могут быть переопределены, например, расширяющимся шаблоном.
Добавлена поддержка итераций имен шаблонов.
load
¶
Загружает настраиваемый набор тегов шаблона.
Например, следующий шаблон загрузит все теги и фильтры, зарегистрированные в пакете somelibrary
и otherlibrary
расположенные в нем
package
:
{% load somelibrary package.otherlibrary %}
Вы также можете выборочно загружать отдельные фильтры или теги из библиотеки, используя from
аргумент. В этом примере теги / фильтры шаблона называются foo
и bar
будут загружены из somelibrary
:
{% load foo bar from somelibrary %}
Дополнительные сведения см. В разделе Пользовательские библиотеки тегов и фильтров .
lorem
¶
Отображает случайный латинский текст «lorem ipsum». Это полезно для предоставления образцов данных в шаблонах.
Применение:
{% lorem [count] [method] [random] %}
Тег может быть использован с нулем, один, два или три аргумента. Аргументы следующие:{% lorem %}
Аргумент | Описание |
---|---|
count |
Число (или переменная), содержащее количество абзацев или слов для создания (по умолчанию 1). |
method |
Либо w для слов, p для абзацев HTML, либо b
для блоков абзацев с обычным текстом (по умолчанию b ). |
random |
Слово random , если оно задано, не использует общий абзац («Lorem ipsum dolor sit amet…») при генерации текста. |
Примеры:
{% lorem %}
выведет общий абзац «lorem ipsum».{% lorem 3 p %}
выведет общий абзац «lorem ipsum» и два случайных абзаца, каждый из которых заключен в<p>
теги HTML .{% lorem 2 w random %}
выведет два случайных латинских слова.
now
¶
Отображает текущую дату и / или время в формате, соответствующем заданной строке. Такая строка может содержать символы спецификаторов формата, как описано в разделе date
фильтров.
Пример:
It is {% now "jS F Y H:i" %}
Обратите внимание, что вы можете экранировать строку формата с помощью обратной косой черты, если хотите использовать «сырое» значение. В этом примере и «o», и «f» экранированы обратной косой чертой, потому что в противном случае каждая из них представляет собой строку формата, которая отображает год и время соответственно:
It is the {% now "jS \o\f F" %}
Это будет отображаться как «4 сентября».
Примечание
Формат прошел также может быть один из предопределенных единиц
DATE_FORMAT
, DATETIME_FORMAT
,
SHORT_DATE_FORMAT
или SHORT_DATETIME_FORMAT
. Предопределенные форматы могут различаться в зависимости от текущей локали и от того , включена ли локализация формата , например:
It is {% now "SHORT_DATETIME_FORMAT" %}
Вы также можете использовать синтаксис для сохранения вывода (в виде строки) внутри переменной. Это полезно, если вы хотите использовать
внутри тега шаблона, например:{% now "Y" as current_year %}
{% now %}
blocktranslate
{% now "Y" as current_year %}
{% blocktranslate %}Copyright {{ current_year }}{% endblocktranslate %}
regroup
¶
Группирует список похожих объектов по общему атрибуту.
Этот сложный тег лучше всего иллюстрируется в качестве примера: скажем , что cities
это список городов представлен словарей , содержащих "name"
,
"population"
и "country"
ключи:
cities = [
{'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
{'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
{'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
{'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
{'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]
… И вы хотите отобразить иерархический список, отсортированный по странам, например:
- Индия
- Мумбаи: 19,000,000
- Калькутта: 15 000 000
- США
- Нью-Йорк: 20 000 000
- Чикаго: 7 000 000
- Япония
- Токио: 33000000
Вы можете использовать тег для группировки списка городов по странам. Следующий фрагмент кода шаблона выполнит это:{% regroup %}
{% regroup cities by country as country_list %}
<ul>
{% for country in country_list %}
<li>{{ country.grouper }}
<ul>
{% for city in country.list %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Давайте рассмотрим этот пример. принимает три аргумента: список, который нужно перегруппировать, атрибут для группировки и имя результирующего списка. Здесь мы перегруппируем список по
атрибуту и вызываем результат .{% regroup %}
cities
country
country_list
{% regroup %}
создает список (в данном случае country_list
)
групповых объектов . Групповые объекты - это экземпляры
namedtuple()
с двумя полями:
grouper
- элемент, сгруппированный по (например, строка «Индия» или «Япония»).list
- список всех элементов в этой группе (например, список всех городов с country = 'India').
Поскольку производит объекты, вы также можете записать предыдущий пример как:{% regroup %}
namedtuple()
{% regroup cities by country as country_list %}
<ul>
{% for country, local_cities in country_list %}
<li>{{ country }}
<ul>
{% for city in local_cities %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Обратите внимание, что не упорядочивает его ввод! Наш пример основан на том, что список был упорядочен в первую очередь. Если бы список не упорядочивал своих членов по , перегруппировка наивно отображала бы более одной группы для одной страны. Например, предположим, что список был настроен на это (обратите внимание, что страны не сгруппированы вместе):{% regroup %}
cities
country
cities
country
cities
cities = [
{'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
{'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
{'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
{'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
{'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]
С этим вводом для cities
приведенный выше пример кода шаблона приведет к следующему выводу:{% regroup %}
- Индия
- Мумбаи: 19,000,000
- США
- Нью-Йорк: 20 000 000
- Индия
- Калькутта: 15 000 000
- США
- Чикаго: 7 000 000
- Япония
- Токио: 33000000
Самое простое решение этой проблемы - убедиться в коде представления, что данные упорядочены в соответствии с тем, как вы хотите их отображать.
Другое решение - отсортировать данные в шаблоне с помощью
dictsort
фильтра, если ваши данные находятся в списке словарей:
{% regroup cities|dictsort:"country" by country as country_list %}
Группировка по другим свойствам ¶
Любой допустимый поиск в шаблоне является допустимым атрибутом группировки для тега перегруппировки, включая методы, атрибуты, ключи словаря и элементы списка. Например, если поле «страна» является внешним ключом для класса с атрибутом «описание», вы можете использовать:
{% regroup cities by country.description as country_list %}
Или, если country
это поле с choices
, у него будет
get_FOO_display()
метод, доступный как атрибут, позволяющий группировать по строке отображения, а не по
choices
ключу:
{% regroup cities by get_country_display as country_list %}
{{ country.grouper }}
теперь будет отображать поля значений из
choices
набора, а не ключи.
resetcycle
¶
Сбрасывает предыдущий цикл, чтобы он перезапустился с первого элемента при следующем столкновении. Без аргументов сбросит последнее значение,
указанное в шаблоне.{% resetcycle %}
{% cycle %}
Пример использования:
{% for coach in coach_list %}
<h1>{{ coach.name }}</h1>
{% for athlete in coach.athlete_set.all %}
<p class="{% cycle 'odd' 'even' %}">{{ athlete.name }}</p>
{% endfor %}
{% resetcycle %}
{% endfor %}
Этот пример вернет этот HTML:
<h1>José Mourinho</h1>
<p class="odd">Thibaut Courtois</p>
<p class="even">John Terry</p>
<p class="odd">Eden Hazard</p>
<h1>Carlo Ancelotti</h1>
<p class="odd">Manuel Neuer</p>
<p class="even">Thomas Müller</p>
Обратите внимание, как заканчивается первый блок, class="odd"
а начинается новый class="odd"
. Без тега второй блок начнется с .{% resetcycle %}
class="even"
Вы также можете сбросить именованные теги цикла:
{% for item in list %}
<p class="{% cycle 'odd' 'even' as stripe %} {% cycle 'major' 'minor' 'minor' 'minor' 'minor' as tick %}">
{{ item.data }}
</p>
{% ifchanged item.category %}
<h1>{{ item.category }}</h1>
{% if not forloop.first %}{% resetcycle tick %}{% endif %}
{% endifchanged %}
{% endfor %}
В этом примере у нас есть как чередующиеся нечетные / четные строки, так и «основная» строка в каждой пятой строке. При изменении категории сбрасывается только пятистрочный цикл.
spaceless
¶
Удаляет пробелы между тегами HTML. Сюда входят символы табуляции и новые строки.
Пример использования:
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
Этот пример вернет этот HTML:
<p><a href="foo/">Foo</a></p>
Удаляется только пространство между тегами, но не пространство между тегами и текстом. В этом примере пространство вокруг Hello
не будет удалено:
{% spaceless %}
<strong>
Hello
</strong>
{% endspaceless %}
templatetag
¶
Выводит один из синтаксических символов, используемых для создания тегов шаблона.
Поскольку в системе шаблонов нет концепции «экранирования», для отображения одного из битов, используемых в тегах шаблона, вы должны использовать этот тег.{% templatetag %}
Аргумент сообщает, какой бит шаблона выводить:
Аргумент | Выходы |
---|---|
openblock |
{% |
closeblock |
%} |
openvariable |
{{ |
closevariable |
}} |
openbrace |
{ |
closebrace |
} |
opencomment |
{# |
closecomment |
#} |
Пример использования:
{% templatetag openblock %} url 'entry_list' {% templatetag closeblock %}
url
¶
Возвращает ссылку на абсолютный путь (URL без имени домена), соответствующую заданному представлению и необязательным параметрам. Любые специальные символы в результирующем пути будут закодированы с использованием iri_to_uri()
.
Это способ вывода ссылок без нарушения принципа DRY за счет необходимости жесткого кодирования URL-адресов в ваших шаблонах:
{% url 'some-url-name' v1 v2 %}
Первый аргумент - это имя шаблона URL . Это может быть литерал в кавычках или любая другая контекстная переменная. Дополнительные аргументы не являются обязательными и должны быть значениями, разделенными пробелами, которые будут использоваться в качестве аргументов в URL-адресе. В приведенном выше примере показана передача позиционных аргументов. В качестве альтернативы вы можете использовать синтаксис ключевых слов:
{% url 'some-url-name' arg1=v1 arg2=v2 %}
Не смешивайте позиционный синтаксис и синтаксис ключевых слов в одном вызове. Должны присутствовать все аргументы, требуемые URLconf.
Например, предположим, что у вас есть представление, app_views.client
URLconf которого принимает идентификатор клиента (здесь client()
метод внутри файла представлений
app_views.py
). Строка URLconf может выглядеть так:
path('client/<int:id>/', app_views.client, name='app-views-client')
Если URLconf этого приложения включен в URLconf проекта по следующему пути:
path('clients/', include('project_name.app_name.urls'))
… Затем в шаблоне вы можете создать ссылку на это представление следующим образом:
{% url 'app-views-client' client.id %}
Тег шаблона выведет строку /clients/client/123/
.
Обратите внимание, что если URL-адрес, который вы реверсируете, не существует, вы получите
NoReverseMatch
исключение, которое заставит ваш сайт отобразить страницу с ошибкой.
Если вы хотите получить URL-адрес, не отображая его, вы можете использовать немного другой вызов:
{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
Область видимости переменной, созданной синтаксисом, - это область,
в которой появляется тег.as var
{% block %}
{% url %}
Этот синтаксис не вызовет ошибки, если представление отсутствует. На практике вы будете использовать это для ссылки на необязательные представления:{% url ... as var %}
{% url 'some-url-name' as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
Если вы хотите получить URL-адрес в пространстве имен, укажите полное имя:
{% url 'myapp:view-name' %}
Это будет следовать обычной стратегии разрешения URL-адресов в пространстве имен , включая использование любых подсказок, предоставляемых контекстом для текущего приложения.
Предупреждение
Не забудьте name
заключить шаблон URL в кавычки , иначе значение будет интерпретировано как контекстная переменная!
verbatim
¶
Останавливает механизм шаблонов от рендеринга содержимого этого тега блока.
Обычно используется для разрешения уровня шаблона JavaScript, который конфликтует с синтаксисом Django. Например:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
Вы также можете назначить специальный закрывающий тег, позволяющий использовать его
как часть неотрисованного содержимого:{% endverbatim %}
{% verbatim myblock %}
Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
{% endverbatim myblock %}
widthratio
¶
Для создания гистограмм и т.п. этот тег вычисляет отношение заданного значения к максимальному значению, а затем применяет это отношение к константе.
Например:
<img src="bar.png" alt="Bar"
height="10" width="{% widthratio this_value max_value max_width %}">
Если this_value
равно 175, max_value
равно 200 и max_width
равно 100, изображение в приведенном выше примере будет иметь ширину 88 пикселей (потому что 175/200 = 0,875; 0,875 * 100 = 87,5, что округляется до 88).
В некоторых случаях вы можете захотеть зафиксировать результат widthratio
в переменной. Это может быть полезно, например, в blocktranslate
таких случаях:
{% widthratio this_value max_value max_width as width %}
{% blocktranslate %}The width is: {{ width }}{% endblocktranslate %}
with
¶
Кэширует сложную переменную под более простым именем. Это полезно при многократном обращении к «дорогостоящему» методу (например, к тому, который попадает в базу данных).
Например:
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
Заселены переменный (в приведенном выше примере, total
) доступно только между и тегами.{% with %}
{% endwith %}
Вы можете назначить более одной переменной контекста:
{% with alpha=1 beta=2 %}
...
{% endwith %}
Примечание
По-прежнему поддерживается предыдущий более подробный формат:
{% with business.employees.count as total %}
Справочник по встроенным фильтрам ¶
add
¶
Добавляет аргумент к значению.
Например:
{{ value|add:"2" }}
Если value
есть 4
, то вывод будет 6
.
Этот фильтр сначала попытается преобразовать оба значения в целые числа. Если это не удастся, он все равно попытается сложить значения. Это будет работать с некоторыми типами данных (строки, список и т. Д.) И не работать с другими. В случае неудачи результатом будет пустая строка.
Например, если у нас есть:
{{ first|add:second }}
и first
есть и есть , то на выходе будет .[1, 2, 3]
second
[4, 5, 6]
[1, 2, 3, 4, 5, 6]
Предупреждение
Строки, которые можно привести к целым числам, будут суммироваться , а не объединяться, как в первом примере выше.
addslashes
¶
Добавляет косую черту перед кавычками. Полезно, например, для экранирования строк в CSV.
Например:
{{ value|addslashes }}
Если value
есть , то вывод будет
."I'm using Django"
"I\'m using Django"
capfirst
¶
Делает первый символ значения заглавным. Если первый символ не является буквой, этот фильтр не действует.
Например:
{{ value|capfirst }}
Если value
есть "django"
, то вывод будет "Django"
.
center
¶
Центрирует значение в поле заданной ширины.
Например:
"{{ value|center:"15" }}"
Если value
есть "Django"
, то вывод будет ." Django "
cut
¶
Удаляет все значения arg из данной строки.
Например:
{{ value|cut:" " }}
Если value
есть , то вывод будет
."String with spaces"
"Stringwithspaces"
date
¶
Форматирует дату в соответствии с заданным форматом.
Использует формат, аналогичный формату функции PHP date()
( https://php.net/date ) с некоторыми отличиями.
Примечание
Эти символы формата не используются в Django вне шаблонов. Они были разработаны для совместимости с PHP, чтобы облегчить переход дизайнерам.
Доступные форматные строки:
Форматировать символ | Описание | Пример вывода |
---|---|---|
День | ||
d |
День месяца, 2 цифры с ведущими нулями. | '01' к '31' |
j |
День месяца без ведущих нулей. | '1' к '31' |
D |
День недели, текстовый, 3 буквы. | 'Fri' |
l |
День недели, текстовый, длинный. | 'Friday' |
S |
Английский порядковый суффикс дня месяца, 2 символа. | 'st' , 'nd' , 'rd' Или'th' |
w |
День недели, цифры без ведущих нулей. | '0' (Воскресенье) - '6' (Суббота) |
z |
День года. | 1 к 366 |
Неделя | ||
W |
Номер недели согласно ISO-8601 в году, недели начинаются с понедельника. | 1 , 53 |
Месяц | ||
m |
Месяц, 2 цифры с ведущими нулями. | '01' к '12' |
n |
Месяц без ведущих нулей. | '1' к '12' |
M |
Месяц, текстовый, 3 буквы. | 'Jan' |
b |
Месяц, текстовое, 3 буквы, строчные. | 'jan' |
E |
Месяц, альтернативное представление для конкретной локали, обычно используемое для представления длинной даты. | 'listopada' (для польского языка, в отличие от 'Listopad' ) |
F |
Месяц, текстовый, длинный. | 'January' |
N |
Аббревиатура месяца в стиле Associated Press. Собственное расширение. | 'Jan.' , 'Feb.' , 'March' ,'May' |
t |
Количество дней в данном месяце. | 28 к 31 |
Год | ||
y |
Год, 2 цифры с ведущими нулями. | '00' к '99' |
Y |
Год, 4 цифры. | '1999' |
L |
Логическое значение високосного года. | True или же False |
o |
Год нумерации недель ISO-8601, соответствующий номеру недели ISO-8601 (W), в котором используются високосные недели. См. Y для более распространенного формата года. | '1999' |
Время | ||
g |
Часовой 12-часовой формат без ведущих нулей. | '1' к '12' |
G |
Часовой, 24-часовой формат без ведущих нулей. | '0' к '23' |
h |
Часовой, 12-часовой формат. | '01' к '12' |
H |
Часовой, 24-часовой формат. | '00' к '23' |
i |
Минуты. | '00' к '59' |
s |
Секунды, 2 цифры с ведущими нулями. | '00' к '59' |
u |
Микросекунды. | 000000 к 999999 |
a |
'a.m.' или 'p.m.' (Обратите внимание, что это немного отличается от вывода PHP, потому что он включает точки, чтобы соответствовать стилю Associated Press.) |
'a.m.' |
A |
'AM' или 'PM' . |
'AM' |
f |
Время в 12-часовых часах и минутах с отсечкой минут, если они равны нулю. Собственное расширение. | '1' , '1:30' |
P |
Время в 12-часовых часах, минутах и «am» / «pm», с оставленными минутами, если они равны нулю, и строками для особых случаев «полночь» и «полдень», если необходимо. Собственное расширение. | '1 a.m.' , , , ,'1:30 p.m.' 'midnight' 'noon' '12:30 p.m.' |
Часовой пояс | ||
e |
Название часового пояса. Может быть в любом формате или может возвращать пустую строку в зависимости от даты и времени. | '' , 'GMT' , '-500' , 'US/Eastern' И т.д. |
I |
Летнее время, независимо от того, действует оно или нет. | '1' или же '0' |
O |
Разница в часах по Гринвичу. | '+0200' |
T |
Часовой пояс этой машины. | 'EST' , 'MDT' |
Z |
Смещение часового пояса в секундах. Смещение для часовых поясов к западу от UTC всегда отрицательно, а для часовых поясов к востоку от UTC всегда положительно. | -43200 к 43200 |
Дата / время | ||
c |
Формат ISO 8601. (Примечание: в отличие от других средств форматирования, таких как «Z», «O» или «r», средство форматирования «c» не будет добавлять смещение часового пояса, если значение является наивным datetime (см. datetime.tzinfo ). |
2008-01-02T10:30:00.000123+02:00 , или 2008-01-02T10:30:00.000123 если datetime наивно |
r |
Дата в формате RFC 5322 . | 'Thu, 21 Dec 2000 16:01:07 +0200' |
U |
Секунды с эпохи Unix (1 января 1970 00:00:00 UTC). |
Например:
{{ value|date:"D d M Y" }}
Если 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"
для:
{{ value|date:"SHORT_DATE_FORMAT" }}
выводом будет строка "09/01/2008"
( "SHORT_DATE_FORMAT"
спецификатор формата для es
локали, поставляемый с Django "d/m/Y"
).
При использовании без строки DATE_FORMAT
формата используется спецификатор формата. При тех же настройках, что и в предыдущем примере:
{{ value|date }}
выходы ( спецификатор формата для
локали ). И «d», и «e» экранируются обратной косой чертой, потому что в противном случае каждая из них представляет собой строку формата, которая отображает день и название часового пояса, соответственно.9 de Enero de 2008
DATE_FORMAT
es
r'j \d\e F \d\e Y'
Вы можете комбинировать date
с time
фильтром, чтобы отобразить полное представление datetime
значения. Например:
{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
default
¶
Если значение равно False
, используется заданное значение по умолчанию. В противном случае используется значение.
Например:
{{ value|default:"nothing" }}
Если value
есть ""
(пустая строка), вывод будет nothing
.
default_if_none
¶
Если (и только если) значение равно None
, используется заданное значение по умолчанию. В противном случае используется значение.
Обратите внимание, что если дана пустая строка, значение по умолчанию использоваться не будет. Используйте default
фильтр, если вы хотите отказаться от пустых строк.
Например:
{{ value|default_if_none:"nothing" }}
Если value
есть None
, то вывод будет nothing
.
dictsort
¶
Принимает список словарей и возвращает этот список, отсортированный по ключу, указанному в аргументе.
Например:
{{ value|dictsort:"name" }}
Если value
это:
[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
тогда вывод будет:
[
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
{'name': 'zed', 'age': 19},
]
Вы также можете делать более сложные вещи, например:
{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}
Если books
это:
[
{'title': '1984', 'author': {'name': 'George', 'age': 45}},
{'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
{'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]
тогда вывод будет:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
dictsort
также может упорядочить список списков (или любой другой объект, реализующий
__getitem__()
) по элементам по указанному индексу. Например:
{{ value|dictsort:0 }}
Если value
это:
[
('a', '42'),
('c', 'string'),
('b', 'foo'),
]
тогда вывод будет:
[
('a', '42'),
('b', 'foo'),
('c', 'string'),
]
Вы должны передавать индекс как целое число, а не как строку. Следующее производит пустой вывод:
{{ values|dictsort:"0" }}
dictsortreversed
¶
Принимает список словарей и возвращает этот список, отсортированный в обратном порядке по ключу, указанному в аргументе. Это работает точно так же, как и указанный выше фильтр, но возвращаемое значение будет в обратном порядке.
divisibleby
¶
Возвращает, True
если значение делится на аргумент.
Например:
{{ value|divisibleby:"3" }}
Если value
есть 21
, то вывод будет True
.
escape
¶
Экранирует строку HTML. В частности, он производит следующие замены:
<
конвертируется в<
>
конвертируется в>
'
(одинарная кавычка) преобразуется в'
"
(двойная кавычка) преобразуется в"
&
конвертируется в&
Применение escape
к переменной, к результату которой обычно применяется автоматическое экранирование, приведет только к одному раунду экранирования. Таким образом, эту функцию безопасно использовать даже в средах с автоматическим экранированием. Если вы хотите применить несколько экранирующих проходов, используйте force_escape
фильтр.
Например, вы можете применить escape
к полям, когда autoescape
он выключен:
{% autoescape off %}
{{ title|escape }}
{% endautoescape %}
escapejs
¶
Экранирует символы для использования в строках JavaScript. Это не делает строку безопасной для использования в литералах шаблонов HTML или JavaScript, но защищает вас от синтаксических ошибок при использовании шаблонов для генерации JavaScript / JSON.
Например:
{{ value|escapejs }}
Если 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|filesizeformat }}
Если value
123456789, вывод будет .117.7 MB
Размеры файлов и единицы СИ
Строго говоря, filesizeformat
это не соответствует Международной системе единиц, которая рекомендует использовать KiB, MiB, GiB и т. Д., Когда размеры байтов вычисляются в степени 1024 (как в данном случае). Вместо этого Django использует традиционные имена модулей (КБ, МБ, ГБ и т. Д.), Соответствующие более часто используемым именам.
first
¶
Возвращает первый элемент в списке.
Например:
{{ value|first }}
Если value
это список , вывод будет .['a', 'b', 'c']
'a'
floatformat
¶
При использовании без аргумента округляет число с плавающей запятой до одного десятичного знака, но только если отображается десятичная часть. Например:
value |
Шаблон | Выход |
---|---|---|
34.23234 |
{{ value|floatformat }} |
34.2 |
34.00000 |
{{ value|floatformat }} |
34 |
34.26000 |
{{ value|floatformat }} |
34.3 |
При использовании с числовым целочисленным аргументом floatformat
округляет число до указанного количества десятичных знаков. Например:
value |
Шаблон | Выход |
---|---|---|
34.23234 |
{{ value|floatformat:3 }} |
34.232 |
34.00000 |
{{ value|floatformat:3 }} |
34.000 |
34.26000 |
{{ value|floatformat:3 }} |
34.260 |
Особенно полезно передать 0 (ноль) в качестве аргумента, который округляет число с плавающей запятой до ближайшего целого числа.
value |
Шаблон | Выход |
---|---|---|
34.23234 |
{{ value|floatformat:"0" }} |
34 |
34.00000 |
{{ value|floatformat:"0" }} |
34 |
39.56000 |
{{ value|floatformat:"0" }} |
40 |
Если переданный аргумент floatformat
отрицательный, он округляет число до такого количества десятичных знаков, но только если отображается десятичная часть. Например:
value |
Шаблон | Выход |
---|---|---|
34.23234 |
{{ value|floatformat:"-3" }} |
34.232 |
34.00000 |
{{ value|floatformat:"-3" }} |
34 |
34.26000 |
{{ value|floatformat:"-3" }} |
34.260 |
Если аргумент, переданный в, floatformat
имеет g
суффикс, он вызовет группировку по THOUSAND_SEPARATOR
активной локали. Например, если активный языковой стандарт en
(английский):
value |
Шаблон | Выход |
---|---|---|
34232.34 |
{{ value|floatformat:"2g" }} |
34,232.34 |
34232.06 |
{{ value|floatformat:"g" }} |
34,232.1 |
34232.00 |
{{ value|floatformat:"-3g" }} |
34,232 |
Использование floatformat
без аргумента эквивалентно использованию floatformat
с аргументом -1
.
В более старых версиях -0
для отрицательных чисел, округляемых до нуля, возвращался отрицательный ноль.
Добавлен g
суффикс для принудительной группировки разделителями тысяч.
force_escape
¶
Применяет экранирование HTML к строке (подробности см. В escape
фильтре). Этот фильтр применяется немедленно и возвращает новую экранированную строку. Это полезно в тех редких случаях, когда вам нужно несколько экранирований или вы хотите применить другие фильтры к экранированным результатам. Обычно вы хотите использовать escape
фильтр.
Например, если вы хотите поймать <p>
элементы HTML, созданные linebreaks
фильтром:
{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}
get_digit
¶
Для целого числа возвращает запрошенную цифру, где 1 - крайняя правая цифра, 2 - вторая правая цифра и т. Д. Возвращает исходное значение для недопустимого ввода (если ввод или аргумент не является целым числом, или если аргумент меньше 1). В противном случае вывод всегда является целым числом.
Например:
{{ value|get_digit:"2" }}
Если value
есть 123456789
, то вывод будет 8
.
iriencode
¶
Преобразует IRI (международный идентификатор ресурса) в строку, подходящую для включения в URL-адрес. Это необходимо, если вы пытаетесь использовать в URL-адресе строки, содержащие символы, отличные от ASCII.
Этот фильтр можно безопасно использовать для строки, которая уже прошла через
urlencode
фильтр.
Например:
{{ value|iriencode }}
Если value
есть "?test=1&me=2"
, то вывод будет "?test=1&me=2"
.
join
¶
Присоединяет список со строкой, как в Python str.join(list)
Например:
{{ value|join:" // " }}
Если value
это список , на выходе будет строка
.['a', 'b', 'c']
"a // b // c"
json_script
¶
Безопасно выводит объект Python как JSON, завернутый в <script>
тег, готовый для использования с JavaScript.
Аргумент: HTML «id» <script>
тега.
Например:
{{ value|json_script:"hello-data" }}
Если value
это словарь , вывод будет:{'hello': 'world'}
<script id="hello-data" type="application/json">{"hello": "world"}</script>
Доступ к полученным данным можно получить в JavaScript следующим образом:
const value = JSON.parse(document.getElementById('hello-data').textContent);
Атаки XSS смягчаются за счет экранирования символов «<», «>» и «&». Например, если value
есть , вывод будет:{'hello': 'world</script>&'}
<script id="hello-data" type="application/json">{"hello": "world\\u003C/script\\u003E\\u0026amp;"}</script>
Это совместимо со строгой политикой безопасности контента, запрещающей выполнение внутристраничных скриптов. Он также поддерживает четкое разделение между пассивными данными и исполняемым кодом.
last
¶
Возвращает последний элемент в списке.
Например:
{{ value|last }}
Если value
это список , на выходе будет строка .['a', 'b', 'c', 'd']
"d"
length
¶
Возвращает длину значения. Это работает как для строк, так и для списков.
Например:
{{ value|length }}
Если value
есть или , вывод будет
.['a', 'b', 'c', 'd']
"abcd"
4
Фильтр возвращается 0
для неопределенной переменной.
length_is
¶
Возвращает, True
если длина значения является аргументом, или False
иначе.
Например:
{{ value|length_is:"4" }}
Если value
есть или , вывод будет
.['a', 'b', 'c', 'd']
"abcd"
True
linebreaks
¶
Заменяет разрывы строк в обычном тексте на соответствующий HTML; одна <br>
новая строка становится разрывом строки HTML ( ), а новая строка, за которой следует пустая строка, становится разрывом абзаца ( </p>
).
Например:
{{ value|linebreaks }}
Если value
есть , то вывод будет .Joel\nis a slug
<p>Joel<br>is a
slug</p>
linebreaksbr
¶
Преобразует все символы новой строки в фрагменте обычного текста в разрывы строк HTML ( <br>
).
Например:
{{ value|linebreaksbr }}
Если value
есть , то вывод будет .Joel\nis a slug
Joel<br>is a
slug
linenumbers
¶
Отображает текст с номерами строк.
Например:
{{ value|linenumbers }}
Если value
это:
one
two
three
вывод будет:
1. one
2. two
3. three
ljust
¶
Выравнивает значение по левому краю в поле заданной ширины.
Аргумент: размер поля
Например:
"{{ value|ljust:"10" }}"
Если value
есть Django
, то вывод будет ."Django "
lower
¶
Преобразует строку в нижний регистр.
Например:
{{ value|lower }}
Если value
есть , то вывод будет
.Totally LOVING this Album!
totally loving this album!
make_list
¶
Возвращает значение, преобразованное в список. Для строки это список символов. Для целого числа аргумент приводится к строке перед созданием списка.
Например:
{{ value|make_list }}
Если value
это строка "Joel"
, выводом будет список
. Если есть , на выходе будет список .['J', 'o', 'e', 'l']
value
123
['1', '2', '3']
phone2numeric
¶
Преобразует номер телефона (возможно, содержащий буквы) в его числовой эквивалент.
Ввод не обязательно должен быть действительным номером телефона. Это с радостью преобразует любую строку.
Например:
{{ value|phone2numeric }}
Если value
есть 800-COLLECT
, то вывод будет 800-2655328
.
pluralize
¶
Возвращает суффикс множественного числа , если значение не является 1
, '1'
или объект длины 1. По умолчанию этот суффикс 's'
.
Пример:
You have {{ num_messages }} message{{ num_messages|pluralize }}.
Если num_messages
есть 1
, то вывод будет:
Если есть, то вывод будетYou have 1 message.
num_messages
2
You have 2 messages.
Для слов, для которых требуется суффикс, отличный от 's'
, вы можете указать альтернативный суффикс в качестве параметра фильтра.
Пример:
You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
Для слов, которые не имеют множественного числа с помощью простого суффикса, вы можете указать суффикс как единственного, так и множественного числа, разделенных запятой.
Пример:
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
Примечание
Используется blocktranslate
для множественного числа переведенных строк.
pprint
¶
Обертка вокруг pprint.pprint()
- собственно, для отладки.
random
¶
Возвращает случайный элемент из данного списка.
Например:
{{ value|random }}
Если value
это список , вывод может быть .['a', 'b', 'c', 'd']
"b"
rjust
¶
Выравнивает значение по правому краю в поле заданной ширины.
Аргумент: размер поля
Например:
"{{ value|rjust:"10" }}"
Если value
есть Django
, то вывод будет ." Django"
safe
¶
Отмечает строку как не требующую дальнейшего экранирования HTML перед выводом. Когда автоматическое экранирование отключено, этот фильтр не действует.
Примечание
Если вы объединяете фильтры, фильтр, примененный после, safe
может снова сделать содержимое небезопасным. Например, следующий код печатает переменную как есть, без экранирования:
{{ var|safe|escape }}
safeseq
¶
Применяет safe
фильтр к каждому элементу последовательности. Полезно в сочетании с другими фильтрами, которые работают с последовательностями, такими как
join
. Например:
{{ some_list|safeseq|join:", " }}
В safe
этом случае нельзя использовать фильтр напрямую, поскольку он сначала преобразует переменную в строку, а не работает с отдельными элементами последовательности.
slice
¶
Возвращает часть списка.
Использует тот же синтаксис, что и нарезка списка Python. См. Введение на https://www.diveinto.org/python3/native-datatypes.html#slicinglists .
Пример:
{{ some_list|slice:":2" }}
Если some_list
есть , то вывод будет .['a', 'b', 'c']
['a', 'b']
slugify
¶
Преобразует в ASCII. Преобразует пробелы в дефисы. Удаляет символы, не являющиеся буквенно-цифровыми, знаками подчеркивания или дефисами. Преобразует в нижний регистр. Также удаляет начальные и конечные пробелы.
Например:
{{ value|slugify }}
Если value
есть , то вывод будет ."Joel is a slug"
"joel-is-a-slug"
stringformat
¶
Форматирует переменную в соответствии с аргументом, спецификатором форматирования строки. Этот спецификатор использует синтаксис форматирования строки в стиле printf , за исключением того, что начальный «%» отбрасывается.
Например:
{{ value|stringformat:"E" }}
Если value
есть 10
, то вывод будет 1.000000E+01
.
striptags
¶
Делает все возможное, чтобы удалить все теги [X] HTML.
Например:
{{ value|striptags }}
Если value
есть , то вывод будет ."<b>Joel</b> <button>is</button> a <span>slug</span>"
"Joel is a slug"
Нет гарантии безопасности
Обратите внимание, что striptags
это не дает никаких гарантий того, что его вывод безопасен для HTML, особенно с недействительным вводом HTML. Поэтому НИКОГДА не применяйте
safe
фильтр к striptags
выходу. Если вы ищете что-то более надежное, вы можете использовать bleach
библиотеку Python, особенно ее
чистый метод.
time
¶
Форматирует время в соответствии с заданным форматом.
Данный формат может быть предопределенным TIME_FORMAT
или настраиваемым, как и date
фильтр. Обратите внимание, что предопределенный формат зависит от языкового стандарта.
Например:
{{ value|time:"H:i" }}
Если value
эквивалентно datetime.datetime.now()
, на выходе будет строка "01:23"
.
Обратите внимание, что вы можете экранировать строку формата с помощью обратной косой черты, если хотите использовать «сырое» значение. В этом примере и «h», и «m» экранируются обратной косой чертой, потому что в противном случае каждая из них представляет собой строку формата, которая отображает час и месяц соответственно:
{% value|time:"H\h i\m" %}
Это будет отображаться как «01ч 23м».
Другой пример:
Предположим, что USE_L10N
есть True
и LANGUAGE_CODE
есть, например, "de"
для:
{{ value|time:"TIME_FORMAT" }}
выводом будет строка "01:23"
( "TIME_FORMAT"
спецификатор формата для de
локали, поставляемый с Django "H:i"
).
time
Фильтр будет принимать только параметры в строке формата , которые относятся ко времени суток, а не в день. Если вам нужно отформатировать date
значение, используйте date
вместо него фильтр (или вместе с ним, time
если вам нужно отобразить полное datetime
значение).
Существует одно исключение выше правило: При передаче datetime
значения с присоединенной информации часового пояса (а часовой пояс, известно datetime
, например) time
фильтр будет принимать часовой пояс связанных спецификаторы формата 'e'
, 'O'
, 'T'
и 'Z'
.
При использовании без строки TIME_FORMAT
формата используется спецификатор формата:
{{ value|time }}
такой же как:
{{ value|time:"TIME_FORMAT" }}
timesince
¶
Форматирует дату как время, прошедшее с этой даты (например, «4 дня, 6 часов»).
Принимает необязательный аргумент, представляющий собой переменную, содержащую дату, которая будет использоваться в качестве точки сравнения (без аргумента точка сравнения находится сейчас ). Например, если blog_date
это экземпляр даты, представляющий полночь 1 июня 2006 г., и comment_date
экземпляр даты для 08:00 1 июня 2006 г., то следующее будет возвращать «8 часов»:
{{ blog_date|timesince:comment_date }}
При сравнении даты и времени с наивным смещением и с учетом смещения будет возвращена пустая строка.
Минуты - это наименьшая используемая единица, и «0 минут» будет возвращено для любой даты, которая находится в будущем относительно точки сравнения.
timeuntil
¶
Аналогично timesince
, за исключением того, что он измеряет время с настоящего момента до заданной даты или datetime. Например, если сегодня 1 июня 2006 г., а
conference_date
экземпляр даты - 29 июня 2006 г., то
вернет значение «4 недели».{{ conference_date|timeuntil }}
Принимает необязательный аргумент , который представляет собой переменный , содержащая дату , чтобы использовать в качестве точки сравнения (вместо того , в настоящее время ). Если from_date
содержит 22 июня 2006 г., то вернется «1 неделя»:
{{ conference_date|timeuntil:from_date }}
При сравнении даты и времени с наивным смещением и с учетом смещения будет возвращена пустая строка.
Минуты - это наименьшая используемая единица, и «0 минут» будет возвращено для любой прошедшей даты относительно точки сравнения.
title
¶
Преобразует строку в регистр заголовка, заставляя слова начинаться с символа верхнего регистра, а оставшиеся символы - с нижнего регистра. Этот тег не пытается сохранить «банальные слова» в нижнем регистре.
Например:
{{ value|title }}
Если value
есть , то вывод будет ."my FIRST post"
"My First Post"
truncatechars
¶
Обрезает строку, если она длиннее указанного количества символов. Усеченные строки заканчиваются переводимым многоточием («…»).
Аргумент: количество символов для усечения
Например:
{{ value|truncatechars:7 }}
Если value
есть , то вывод будет ."Joel is a slug"
"Joel i…"
truncatechars_html
¶
Аналогично truncatechars
, за исключением того, что он поддерживает HTML-теги. Любые теги, открытые в строке и не закрытые до точки усечения, закрываются сразу после усечения.
Например:
{{ value|truncatechars_html:7 }}
Если value
есть , то вывод будет
."<p>Joel is a slug</p>"
"<p>Joel i…</p>"
Новые строки в содержимом HTML будут сохранены.
truncatewords
¶
Обрезает строку после определенного количества слов.
Аргумент: количество слов, которые нужно обрезать после
Например:
{{ value|truncatewords:2 }}
Если value
есть , то вывод будет ."Joel is a slug"
"Joel is …"
Новые строки в строке будут удалены.
truncatewords_html
¶
Аналогично truncatewords
, за исключением того, что он поддерживает HTML-теги. Любые теги, которые открываются в строке и не закрываются до точки усечения, закрываются сразу после усечения.
Это менее эффективно truncatewords
, поэтому его следует использовать только при передаче текста HTML.
Например:
{{ value|truncatewords_html:2 }}
Если value
есть , то вывод будет
."<p>Joel is a slug</p>"
"<p>Joel is …</p>"
Новые строки в содержимом HTML будут сохранены.
unordered_list
¶
Рекурсивно принимает самовложенный список и возвращает неупорядоченный список HTML - БЕЗ открытия и закрытия тегов <ul>.
Предполагается, что список имеет правильный формат. Например, если var
содержит , то
вернет:['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]
{{ var|unordered_list }}
<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>
upper
¶
Преобразует строку в верхний регистр.
Например:
{{ value|upper }}
Если value
есть , то вывод будет ."Joel is a slug"
"JOEL IS A SLUG"
urlencode
¶
Экранирует значение для использования в URL-адресе.
Например:
{{ value|urlencode }}
Если value
есть "https://www.example.org/foo?a=b&c=d"
, то вывод будет
"https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"
.
Может быть предоставлен необязательный аргумент, содержащий символы, которые не следует экранировать.
Если не указан, символ «/» считается безопасным. Если нужно экранировать все символы, можно указать пустую строку . Например:
{{ value|urlencode:"" }}
Если value
есть "https://www.example.org/"
, то вывод будет
"https%3A%2F%2Fwww.example.org%2F"
.
urlize
¶
Преобразует URL-адреса и адреса электронной почты в тексте в интерактивные ссылки.
Этот шаблон тег работает на ссылки с префиксом http://
, https://
или
www.
. Например, https://goo.gl/aia1t
конвертируется, но goo.gl/aia1t
не конвертируется
.
Он также поддерживает доменные только ссылки , заканчивающиеся в одном из доменов верхнего уровня оригинала ( .com
, .edu
, .gov
, .int
, .mil
, .net
, и
.org
). Например, djangoproject.com
конвертируется.
В ссылках могут быть конечные знаки препинания (точки, запятые, закрывающие скобки) и начальные знаки препинания (открывающие скобки), и urlize
они по-прежнему будут работать правильно.
К ссылкам, созданным с urlize
помощью, rel="nofollow"
добавлен атрибут.
Например:
{{ value|urlize }}
Если value
есть , то вывод будет
."Check out www.djangoproject.com"
"Check out <a href="http://www.djangoproject.com"
rel="nofollow">www.djangoproject.com</a>"
Помимо веб-ссылок, urlize
также преобразует адреса электронной почты в
mailto:
ссылки. Если value
есть
, то вывод будет
."Send questions to [email protected]"
"Send questions to <a href="mailto:[email protected]">[email protected]</a>"
urlize
Фильтр также принимает необязательный параметр autoescape
. Если
autoescape
есть True
, текст ссылки и URL - адреса будут экранированы с помощью встроенного в Джанго escape
фильтр. Значение по умолчанию
autoescape
- True
.
Примечание
Если urlize
применяется к тексту, который уже содержит разметку HTML, или к адресам электронной почты, содержащим одинарные кавычки ( '
), все будет работать не так, как ожидалось. Применяйте этот фильтр только к обычному тексту.
urlizetrunc
¶
Преобразует URL-адреса и адреса электронной почты в интерактивные ссылки так же, как urlize , но обрезает URL-адреса, длина которых превышает заданный предел символов.
Аргумент: количество символов, до которых следует усечь текст ссылки, включая многоточие, добавляемое в случае необходимости усечения.
Например:
{{ value|urlizetrunc:15 }}
Если value
есть , то вывод будет
."Check out www.djangoproject.com"
'Check out <a href="http://www.djangoproject.com"
rel="nofollow">www.djangoproj…</a>'
Как и urlize , этот фильтр следует применять только к обычному тексту.
wordcount
¶
Возвращает количество слов.
Например:
{{ value|wordcount }}
Если value
есть , то вывод будет ."Joel is a slug"
4
wordwrap
¶
Переносит слова на указанную длину строки.
Аргумент: количество символов для переноса текста
Например:
{{ value|wordwrap:5 }}
Если value
есть , то выход будет:Joel is a slug
Joel
is a
slug
yesno
¶
Сопоставляет значения для True
, False
и (необязательно) None
со строками «да», «нет», «возможно» или настраиваемым сопоставлением, переданным в виде списка, разделенного запятыми, и возвращает одну из этих строк в соответствии со значением:
Например:
{{ value|yesno:"yeah,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 задано сопоставление ) |
Теги и фильтры интернационализации ¶
Django предоставляет теги шаблонов и фильтры для управления каждым аспектом интернационализации в шаблонах. Они позволяют детально контролировать переводы, форматирование и преобразование часовых поясов.
i18n
¶
Эта библиотека позволяет указывать переводимый текст в шаблонах. Чтобы включить его, установите USE_I18N
на True
, а затем загрузить его
.{% load i18n %}
Смотрите Интернационализацию: в коде шаблона .
l10n
¶
Эта библиотека обеспечивает контроль над локализацией значений в шаблонах. Вам нужно только загрузить библиотеку с помощью , но вы часто устанавливаете это так, чтобы локализация была активна по умолчанию.{% load l10n %}
USE_L10N
True
См. Раздел Управление локализацией в шаблонах .
tz
¶
Эта библиотека обеспечивает управление преобразованием часовых поясов в шаблонах. Например l10n
, вам нужно только загрузить библиотеку с помощью , но обычно вы также устанавливаете значение, чтобы преобразование в местное время происходило по умолчанию.{% load tz %}
USE_TZ
True
См. Раздел «Вывод с учетом часового пояса» в шаблонах .
Другие библиотеки тегов и фильтров ¶
Django поставляется с парой других библиотек шаблонных тегов, которые вы должны явно включить в своих INSTALLED_APPS
настройках и включить в своем шаблоне с помощью тега.{% load %}
django.contrib.humanize
¶
Набор шаблонных фильтров Django, полезных для добавления «человечности» к данным. См. Django.contrib.humanize .
static
¶
static
¶
Ссылка на статические файлы, сохраненные в STATIC_ROOT
Django, поставляется с static
тегом шаблона. Если django.contrib.staticfiles
приложение установлено, тег будет обслуживать файлы, используя url()
метод хранения, указанный в STATICFILES_STORAGE
. Например:
{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!">
Он также может использовать стандартные переменные контекста, например, если
user_stylesheet
переменная передана в шаблон:
{% load static %}
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen">
Если вы хотите получить статический URL-адрес, не отображая его, вы можете использовать немного другой вызов:
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}">
Используете шаблоны Jinja2?
См. Jinja2
Информацию об использовании static
тега с Jinja2.
get_static_prefix
¶
Вы должны предпочесть static
тег шаблона, но если вам нужно больше контроля над тем, где и как STATIC_URL
именно вводится в шаблон, вы можете использовать get_static_prefix
тег шаблона:
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!">
Существует также вторая форма, которую вы можете использовать, чтобы избежать дополнительной обработки, если вам нужно значение несколько раз:
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!">
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!">
get_media_prefix
¶
Как и get_static_prefix
, get_media_prefix
заполняет переменную шаблона префиксом мультимедиа MEDIA_URL
, например:
{% load static %}
<body data-media-url="{% get_media_prefix %}">
Сохраняя значение в атрибуте данных, мы гарантируем, что оно правильно экранировано, если мы хотим использовать его в контексте JavaScript.