Встроенные шаблонные теги и фильтры¶
Этот раздел описывает строенные шаблонные теги и фильтры Django. Рекомендуем использовать автоматическую документацию по возможности, т.к. она включает также собственные теги и фильтры.
Список встроенных тегов¶
autoescape¶
Контролирует авто-экранирование. Этот тег принимает on или off аргумент, указывающий должно ли использоваться автоматическое экранирование внутри блока. Блок закрывается закрывающим тегом endautoescape.
When auto-escaping is in effect, all variable content has HTML escaping applied
to it before placing the result into the output (but after any filters have
been applied). This is equivalent to manually applying the escape
filter to each variable.
The only exceptions are variables that are already marked as «safe» from
escaping, either by the code that populated the variable, or because it has had
the safe or escape filters applied.
Sample usage:
{% autoescape on %}
{{ body }}
{% endautoescape %}
openblock¶
Определяет блок, который может быть переопределен в дочернем шаблоне. Смотрите подробности в разделе о наследовании шаблонов.
opencomment¶
Игнорирует содержимое между {% comment %} и {% endcomment %}. Можно добавить заметку в первый тег. Например, добавить комментарий, описывающий почему код был закомментирован.
Sample usage:
<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 защиты, как это описано в разделе о защите от CSRF.
cycle¶
Возвращает один из аргументов при вызове. Первый аргумент при первом вызове, второй - при втором, и т.д. Когда аргументы кончаются, тег начинает с начала списка аргументов.
This tag is particularly useful in a loop:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
Первый вызов сгенерирует HTML используя класс row1, второй - row2, третий - снова row1, и так далее для каждой итерации цикла.
You can use variables, too. For example, if you have two template variables,
rowvalue1 and rowvalue2, you can alternate between their values like
this:
{% for o in some_list %}
<tr class="{% cycle rowvalue1 rowvalue2 %}">
...
</tr>
{% endfor %}
Variables included in the cycle will be escaped. You can disable auto-escaping with:
{% for o in some_list %}
<tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}">
...
</tr>
{% endfor %}
You can mix variables and strings:
{% for o in some_list %}
<tr class="{% cycle 'row1' rowvalue2 'row3' %}">
...
</tr>
{% endfor %}
In some cases you might want to refer to the current value of a cycle
without advancing to the next value. To do this,
give the {% cycle %} tag a name, using «as», like this:
{% cycle 'row1' 'row2' as rowcolors %}
From then on, you can insert the current value of the cycle wherever you’d like
in your template by referencing the cycle name as a context variable. If you
want to move the cycle to the next value independently of the original
cycle tag, you can use another cycle tag and specify the name of the
variable. So, the following template:
<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>
would output:
<tr>
<td class="row1">...</td>
<td class="row1">...</td>
</tr>
<tr>
<td class="row2">...</td>
<td class="row2">...</td>
</tr>
Вы можете использовать любое количество значений в теге cycle, разделенных пробелами. Значения в одинарных (') или двойных кавычках (") рассматриваются как строки, в то время как, значения без кавычек, интерпретируются как переменные.
By default, when you use the as keyword with the cycle tag, the
usage of {% cycle %} that initiates the cycle will itself produce
the first value in the cycle. This could be a problem if you want to
use the value in a nested loop or an included template. If you only want
to declare the cycle but not produce the first value, you can add a
silent keyword as the last keyword in the tag. For example:
{% 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>.
When the silent keyword is used on a cycle definition, the silence
automatically applies to all subsequent uses of that specific cycle tag.
The following template would output nothing, even though the second
call to {% cycle %} doesn’t specify silent:
{% cycle 'row1' 'row2' as rowcolors silent %}
{% cycle rowcolors %}
Вы можете использовать тег resetcycle, чтобы перезапустить тег {% Cycle %} с его первого значения при следующем обнаружении.
debug¶
Outputs a whole load of debugging information, including the current context and imported modules.
extends¶
Указывает что данный шаблон наследуется от родительского.
Может использоваться двумя способами:
{% extends "base.html" %}(с кавычками) использует буквальное значение"base.html"в качестве названия родительского шаблона.{% extends variable %}использует значениеvariable. Если значение строка, Django использует ее как название родительского шаблона. Если значение переменной объектTemplate, Django использует этот объект как родительский шаблон.
Смотрите подробности в Наследование шаблонов.
Normally the template name is relative to the template loader’s root directory.
A string argument may also be a relative path starting with ./ or ../.
For example, assume the following directory structure:
dir1/
template.html
base2.html
my/
base3.html
base1.html
In template.html, the following paths would be valid:
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
filter¶
Содержимое тега будет обработано указанными фильтрами. Можно указать цепочку фильтров, а также их аргументы, как и при выводе переменной в шаблоне.
Содержимое тега включает весь текст между filter и endfilter.
Sample usage:
{% filter force_escape|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}
Примечание
Нельзя передавать фильтры escape и safe. Вместо этого используйте тег autoescape.
firstof¶
Выводит первую из переданных переменных, которая не равна False. Ничего не выводит, если все переменные равны False.
Sample usage:
{% firstof var1 var2 var3 %}
This is equivalent to:
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
You can also use a literal string as a fallback value in case all passed variables are False:
{% firstof var1 var2 var3 "fallback value" %}
This tag auto-escapes variable values. You can disable auto-escaping with:
{% autoescape off %}
{% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}
Or if only some variables should be escaped, you can use:
{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}
Вы можете использовать синтаксис {% firstof var1 var2 var3 as value %}, чтобы сохранить результат в переменной.
or¶
Loops over each item in an array, making the item available in a context
variable. For example, to display a list of athletes provided in
athlete_list:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
Вы можете использовать цикл по списку в обратном порядке {% for obj in list reversed %}.
If you need to loop over a list of lists, you can unpack the values
in each sublist into individual variables. For example, if your context
contains a list of (x,y) coordinates called points, you could use the
following to output the list of points:
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}
This can also be useful if you need to access the items in a dictionary.
For example, if your context contained a dictionary data, the following
would display the keys and values of the dictionary:
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
Помните, что при обращении через точку для словарю сначала ищется ключ, а затем метод. Если словарь data содержит ключ 'items', data.items вернет data['items'] вместо data.items(). Избегайте использования ключей, которые совпадают с названиями методов, если вы хотите их использовать в шаблоне (items, values, keys, и т.д.). Порядок получения значения описан в разделе о переменных шаблонов.
Внутри цикла доступные некоторые дополнительные переменные:
Переменная |
Описание |
|---|---|
|
Номер текущей итерации цикла начиная с 1 |
|
Номер текущей итерации цикла начиная с 0 |
|
Номер текущей итерации цикла начиная с конца с 1 |
|
Номер текущей итерации цикла начиная с конца с 0 |
|
|
|
|
|
Для вложенных циклов, это «внешний» цикл. |
for … empty¶
The for tag can take an optional {% empty %} clause whose text is
displayed if the given array is empty or could not be found:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
The above is equivalent to – but shorter, cleaner, and possibly faster than – the following:
<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>
если¶
The {% if %} tag evaluates a variable, and if that variable is «true» (i.e.
exists, is not empty, and is not a false boolean value) the contents of the
block are output:
{% 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 tags may use and, or or not to test a number of
variables or to negate a given variable:
{% 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 %}
Use of both and and or clauses within the same tag is allowed, with
and having higher precedence than or e.g.:
{% if athlete_list and coach_list or cheerleader_list %}
will be interpreted like:
if (athlete_list and coach_list) or cheerleader_list
Использовать скобки в теге if нельзя. Если вам нужно указать приоритет, используйте вложенные теги if.
Тег if может использовать операторы ==, !=, <, >, <=, >= и in которые работают таким образом:
Оператор ==¶
Equality. Example:
{% if somevar == "x" %}
This appears if variable somevar equals the string "x"
{% endif %}
Оператор !=¶
Inequality. Example:
{% if somevar != "x" %}
This appears if variable somevar does not equal the string "x",
or if somevar is not found in the context
{% endif %}
Оператор <¶
Less than. Example:
{% if somevar < 100 %}
This appears if variable somevar is less than 100.
{% endif %}
Оператор >¶
Greater than. Example:
{% if somevar > 0 %}
This appears if variable somevar is greater than 0.
{% endif %}
Оператор <=¶
Less than or equal to. Example:
{% if somevar <= 100 %}
This appears if variable somevar is less than 100 or equal to 100.
{% endif %}
Оператор >=¶
Greater than or equal to. Example:
{% if somevar >= 1 %}
This appears if variable somevar is greater than 1 or equal to 1.
{% endif %}
Оператор in¶
Contained within. This operator is supported by many Python containers to test
whether the given value is in the container. The following are some examples
of how x in y will be interpreted:
{% 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.
Оператор in¶
Object identity. Tests if two values are the same object. Example:
{% 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 %}
Оператор in¶
Negated object identity. Tests if two values are not the same object. This is
the negation of the is operator. Example:
{% 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 %}
Фильтры¶
You can also use filters in the if expression. For example:
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
Сложные выражения¶
Все перечисленное выше может быть использовано вместе для создания сложных выражений. Для таких выражений, важно знать как операторы группируются при выполнении выражения - то есть, правила приоритета. Приоритет операторов, от низшего к высшему, выглядит следующим образом:
orandnotin==,!=,<,>,<=,>=
(This follows Python exactly). So, for example, the following complex
if tag:
{% if a == b or c == d and e %}
…будет интерпретирован как:
(a == b) or ((c == d) and e)
Если вам нужен другой приоритет, используйте вложенные теги if. Иногда этот способ более понятен, во всяком случае, для тех, кто не знает правил приоритета.
The comparison operators cannot be „chained“ like in Python or in mathematical notation. For example, instead of using:
{% if a > b > c %} (WRONG)
you should use:
{% if a > b and b > c %}
ifequal and ifnotequal¶
Не рекомендуется, начиная с версии 3.1.
{% ifequal a b %} ... {% endifequal %} is an obsolete way to write
{% if a == b %} ... {% endif %}. Likewise, {% ifnotequal a b %} ...
{% endifnotequal %} is superseded by {% if a != b %} ... {% endif %}.
ifchanged¶
Проверяет было ли изменено значение с предыдущей итерации цикла.
Блочный тег {% ifchanged %} используется внутри цикла. Существует два способа использовать тег.
Checks its own rendered contents against its previous state and only displays the content if it has changed. For example, this displays a list of days, only displaying the month if it changes:
<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 %}
If given one or more variables, check whether any variable has changed. For example, the following shows the date every time it changes, while showing the hour if either the hour or the date has changed:
{% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} {% ifchanged date.hour date.date %} {{ date.hour }} {% endifchanged %} {% endfor %}
The ifchanged tag can also take an optional {% else %} clause that
will be displayed if the value has not changed:
{% for match in matches %}
<div style="background-color:
{% ifchanged match.ballot_id %}
{% cycle "red" "blue" %}
{% else %}
gray
{% endifchanged %}
">{{ match }}</div>
{% endfor %}
include¶
Загружает шаблон и выводит его с текущим контекстом. Это способ «включить» один шаблон в другой.
Названия шаблона можно указать переменной или строкой в одинарных или двойных кавычках.
This example includes the contents of the template "foo/bar.html":
{% include "foo/bar.html" %}
Обычно имя шаблона указывается относительно корневого каталога загрузчика шаблонов. Строковый аргумент также может представлять собой относительный путь, начинающийся с ./ или ../, как описано в теге extends.
This example includes the contents of the template whose name is contained in
the variable template_name:
{% include template_name %}
Можно передать любой объект с методом render(), который принимает контекст. Это позволяет указать скомпилированные объекты Template из контекста.
Кроме того, переменная может быть итерацией имен шаблонов, и в этом случае будет использоваться первый, который может быть загружен, согласно select_template().
Включенный шаблон выполняется с контекстом шаблона, который его включает. Этот пример выводит "Hello, John!":
Контекст: переменная
personравна"john"иgreetingравна"Hello".Template:
{% include "name_snippet.html" %}
The
name_snippet.htmltemplate:{{ greeting }}, {{ person|default:"friend" }}!
You can pass additional context to the template using keyword arguments:
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
If you want to render the context only with the variables provided (or even
no variables at all), use the only option. No other variables are
available to the included template:
{% include "name_snippet.html" with greeting="Hi" only %}
Примечание
Тег include должен восприниматься как «выполним этот под-шаблон и включим полученный HTML», а не «парсим этот под-шаблон и включаем его как часть родительского». Это означает, что нет никакого общего состояния между включенными шаблонами – каждое включение это полностью независимый процесс.
Блоки выполняются перед включение шаблона. Это означает, что шаблон включает уже выполненные и отрендеренные блоки - вы не можете переопределить эти блоки, как это делается при наследовании шаблонов.
Support for iterables of template names was added.
load¶
Загружает библиотеку тегов.
For example, the following template would load all the tags and filters
registered in somelibrary and otherlibrary located in package
package:
{% load somelibrary package.otherlibrary %}
You can also selectively load individual filters or tags from a library, using
the from argument. In this example, the template tags/filters named foo
and bar will be loaded from somelibrary:
{% load foo bar from somelibrary %}
Смотрите раздел о собственных библиотеках фильтров и тегов.
lorem¶
Выводит случайный «lorem ipsum» текст. Полезен для генерации примера данных в шаблоне.
Использование:
{% lorem [count] [method] [random] %}
Тег {% lorem %} принимает несколько аргументов:
Аргумент |
Описание |
|---|---|
|
Количество параграфов или слов в сгенерированном тесте (по умолчанию 1). |
|
Принимает |
|
Если передать слово |
Например:
{% lorem %}выведет обычный параграф «lorem ipsum».{% lorem 3 p %}выведет обычный параграф «lorem ipsum» и два случайных параграфа, обернутые в HTML тег<p>.{% lorem 2 w random %}выведет два случайных слова на латыни.
no¶
Отображает текущую дату и/или время, используя формат соответственно переданной строке. Эта строка может содержать символы форматирования описанные в разделе о фильтре date.
Например:
It is {% now "jS F Y H:i" %}
Note that you can backslash-escape a format string if you want to use the «raw» value. In this example, both «o» and «f» are backslash-escaped, because otherwise each is a format string that displays the year and the time, respectively:
It is the {% now "jS \o\f F" %}
Этот пример выведет «It is the 4th of September».
Примечание
The format passed can also be one of the predefined ones
DATE_FORMAT, DATETIME_FORMAT,
SHORT_DATE_FORMAT or SHORT_DATETIME_FORMAT.
The predefined formats may vary depending on the current locale and
if Формат локализации is enabled, e.g.:
It is {% now "SHORT_DATETIME_FORMAT" %}
You can also use the syntax {% now "Y" as current_year %} to store the
output (as a string) inside a variable. This is useful if you want to use
{% now %} inside a template tag like blocktranslate for example:
{% now "Y" as current_year %}
{% blocktranslate %}Copyright {{ current_year }}{% endblocktranslate %}
regroup¶
Группирует объекты по общему атрибуту.
Этот сложный тег лучше всего объяснить с помощью примера: «places» является списком городов, представленным словарями с ключами "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
Япония
Токио: 33,000,000
You can use the {% regroup %} tag to group the list of cities by country.
The following snippet of template code would accomplish this:
{% 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) из групп объектов. Каждый объект группы содержит два атрибута:
grouper– значение, по которому происходила группировка (например, строка «Индия» или «Япония»).list– список объектов в группе (например, список всех городов сcountry='India').
Because {% regroup %} produces namedtuple() objects,
you can also write the previous example as:
{% 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'},
]
В результате применения тега {% regroup %} для списка выше получим такой результат:
Индия
Мамбай: 19,000,000
США
Нью Йорк: 20,000,000
Индия
Калькутта: 15,000,000
США
Чикаго: 7,000,000
Япония
Токио: 33,000,000
Самый простой способ решить эту проблему - удостовериться, что данные отсортированы так, как должны быть отображены.
Another solution is to sort the data in the template using the
dictsort filter, if your data is in a list of dictionaries:
{% regroup cities|dictsort:"country" by country as country_list %}
Группировка по другим свойствам¶
Any valid template lookup is a legal grouping attribute for the regroup tag, including methods, attributes, dictionary keys and list items. For example, if the «country» field is a foreign key to a class with an attribute «description,» you could use:
{% regroup cities by country.description as country_list %}
Or, if country is a field with choices, it will have a
get_FOO_display() method available as an
attribute, allowing you to group on the display string rather than the
choices key:
{% regroup cities by get_country_display as country_list %}
{{ country.grouper }} теперь будет отображать значение поля, а не ключи choices.
cycle¶
Сбрасывает предыдущий `цикл`_, чтобы при следующем обнаружении он возобновлялся с первого элемента. Без аргументов {% resetcycle %} сбросит последний {% цикл %}, определенный в шаблоне.
Пример использования:
{% 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 %}
This example would return this 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".
You can also reset named cycle tags:
{% 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 %}
This example would return this HTML:
<p><a href="foo/">Foo</a></p>
Only space between tags is removed – not space between tags and text. In
this example, the space around Hello won’t be stripped:
{% spaceless %}
<strong>
Hello
</strong>
{% endspaceless %}
templatetag¶
Выводит один из символов, которые используются для определения тегов.
Since the template system has no concept of «escaping», to display one of the
bits used in template tags, you must use the {% templatetag %} tag.
Аргумент указывает, какой элемент синтаксиса отображать:
Аргумент |
Вывод |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sample usage:
{% templatetag openblock %} url 'entry_list' {% templatetag closeblock %}
URL¶
Возвращает абсолютную ссылку (URL без имени домена) соответствующую указанному представлению с необязательными аргументами. Любые спецсимволы будут экранированы с помощью функции iri_to_uri().
This is a way to output links without violating the DRY principle by having to hard-code URLs in your templates:
{% url 'some-url-name' v1 v2 %}
The first argument is a URL pattern name. It can be a quoted literal or any other context variable. Additional arguments are optional and should be space-separated values that will be used as arguments in the URL. The example above shows passing positional arguments. Alternatively you may use keyword syntax:
{% url 'some-url-name' arg1=v1 arg2=v2 %}
Нельзя использовать и позиционные и именованные аргументы в одном теге. Все обязательные аргументы URLconf должны быть указаны.
Например, мы имеем представление, app_views.client, чей URLconf принимает ID клиента (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'))
…then, in a template, you can create a link to this view like this:
{% url 'app-views-client' client.id %}
Тег вернет такую строку /clients/client/123/.
Следует отметить, что если вы пытаетесь вывести URL который не существует, будет выброшено исключение django.core.urlresolvers.NoReverseMatch, и ваш сайт покажет страницу с ошибкой.
If you’d like to retrieve a URL without displaying it, you can use a slightly different call:
{% url 'some-url-name' arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
Переменная, созданная as var, будет доступна только в {% block %}, в котором используется тег {% url %}.
This {% url ... as var %} syntax will not cause an error if the view is
missing. In practice you’ll use this to link to views that are optional:
{% url 'some-url-name' as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
If you’d like to retrieve a namespaced URL, specify the fully qualified name:
{% url 'myapp:view-name' %}
Это приведет к использованию стандартной стратегии разрешения пространств имен в URL, включая использование данных контекста для определения текущего приложения.
Предупреждение
Не забудьте взять в кавычки name, иначе значение будет интерпретировано как переменная!
verbatim¶
Не позволяет шаблонной системе обрабатывать содержимое этого блочного тега.
A common use is to allow a JavaScript template layer that collides with Django’s syntax. For example:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
You can also designate a specific closing tag, allowing the use of
{% endverbatim %} as part of the unrendered contents:
{% 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 = .875; .875 * 100 = 87.5 что приблизительно равно 88).
In some cases you might want to capture the result of widthratio in a
variable. It can be useful, for instance, in a blocktranslate like this:
{% 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 %}.
You can assign more than one context variable:
{% with alpha=1 beta=2 %}
...
{% endwith %}
Примечание
Предыдущий синтаксис так же работает: {% with business.employees.count as total %}
Список встроенных фильтров¶
добавить¶
Суммирует аргумент и значение.
Например:
{{ value|add:"2" }}
Если value равно 4, будет выведено 6.
Фильтр попытается преобразовать оба значения в целое число. Если это не удастся, он будет пытаться добавить значения в любом случае. Это работает для некоторых типов (строки, списки и др.) и не работает с другими. Если ничего не получится, будет выведена пустая строка.
For example, if we have:
{{ 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 ".
вырезать¶
Удаляет значение аргумента из строки, к которой применяется фильтр.
Например:
{{ value|cut:" " }}
Если value равно "String with spaces", результат будет "Stringwithspaces".
date¶
Форматирует дату в соответствии с указанным форматом.
Uses a similar format as PHP’s date() function (https://php.net/date)
with some differences.
Примечание
Эти символы форматирования используются только в шаблонах Django. Они были созданы для совместимости с PHP, чтобы верстальщикам было проще перейти на Django.
Доступное форматирование:
Символ форматирования |
Описание |
Пример вывода |
|---|---|---|
День |
||
|
День месяца, 2 цифры с ведущим нулем. |
От |
|
День месяца без ведущего нуля. |
От |
|
День недели, 3-х буквенное текстовое название. |
|
|
Название дня недели, текстовое, длинное. |
|
|
Английский суффикс для дня месяца, 2 символа. |
|
|
Номер дня недели, без ведущих нулей. |
от |
|
Номер дня в году. |
От |
Неделя |
||
|
Норме недели в году в соответствии с ISO-8601, первая неделя начинается с понедельника. |
|
Месяц |
||
|
Месяц, 2-цифирный с ведущими нулями. |
От |
|
Номер месяца без ведущего нуля. |
От |
|
Название месяца, текстовое, 3-х буквенное. |
|
|
Название месяца, 3-х буквенное, в нижнем регистре. |
|
|
Название месяца, зависит от текущего языка. Используется для отображения полного называния даты. |
|
|
Название месяца, текстовое, длинное. |
|
|
Аббревиатура названия месяца в формате Associated Press. Собственное расширение. |
|
|
Количество дней в месяце. |
От |
Год |
||
|
Year, 2 digits. |
|
`` Д`` |
Year, 4 digits. |
|
|
Булево значение указывающее високосный ли год. |
|
`` о`` |
week-numbering год в соответствии с ISO-8601 |
|
Время |
||
|
Час, 12-часовом формате без ведущих нулей. |
От |
|
Час, 24-часовой формат |
От |
|
Час, 12-часовой формат. |
От |
|
Час, 24-часовой формат. |
От |
|
Минуты. |
От |
|
Секунды, 2-цифирный формат без ведущих нулей. |
От |
`` ты`` |
микросекунды |
От |
|
|
|
|
|
|
|
Время, час в 12-часовом формате и минуты, минуты не отображаются если равны нулю. Собственное расширение. |
|
|
Время, в 12-часовом формате, минуты и „a.m.“/“p.m.“, минуты упускаются если равны нулю, значения „midnight“ и „noon“ используются по возможности. Собственное расширение. |
|
Часовой пояс |
||
|
Название временной зоны. Может быть в любом формате, или вернуть пустую строку в зависимости от объекта даты. |
|
|
Daylight Savings Time, whether it’s in effect or not. |
От |
|
Разница с временем по Гринвичу |
|
|
Часовой пояс сервера. |
|
|
Смещения часового пояса в секундах. Для часового пояса западнее UTC значение будет отрицательным, для тех, что восточнее UTC – положительным. |
От |
Дата/Время |
||
|
Формат ISO 8601. (Примечание: в отличие от других средств форматирования, таких как «Z», «O» или «r», форматтер «c» не будет добавлять смещение часового пояса, если значением является простое значение даты и времени (см. |
|
|
Дата в формате RFC 2822. |
|
|
Секунды с начала эпохи 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) или любой другой сформированный из символов форматирования из таблицы выше. Предопределенные форматы зависят от текущего языка и настройки format-localization, например:
Assuming that USE_L10N is True and LANGUAGE_CODE is,
for example, "es", then for:
{{ value|date:"SHORT_DATE_FORMAT" }}
результат вывода будет "09/01/2008" (формат "SHORT_DATE_FORMAT" для языка es указан в Django как "d/m/Y").
When used without a format string, the DATE_FORMAT format specifier is
used. Assuming the same settings as the previous example:
{{ value|date }}
Вы можете экранировать символ форматирования с помощью слэша и использовать его как строку. В этом примере, «o» и «f» экранированы, т.к. иначе они будут использованы как строки форматирования, отображающие год и время:
You can combine date with the time filter to render a full
representation of a datetime value. E.g.:
{{ 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},
]
You can also do more complicated things like:
{% 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}},
]
then the output would be:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
dictsort can also order a list of lists (or any other object implementing
__getitem__()) by elements at specified index. For example:
{{ value|dictsort:0 }}
Если value равно:
[
('a', '42'),
('c', 'string'),
('b', 'foo'),
]
будет возвращено:
[
('a', '42'),
('b', 'foo'),
('c', 'string'),
]
You must pass the index as an integer rather than a string. The following produce empty output:
{{ values|dictsort:"0" }}
dictsortreversed¶
Принимает список словарей и возвращает список отсортированный по указанному ключу в обратном порядке. Работает аналогично фильтру выше, но возвращает список в обратном порядке.
divisibleby¶
Возвращает True, если значение делится на аргумент.
Например:
{{ value|divisibleby:"3" }}
Если value равно 21, будет возвращено True.
escape¶
Экранирует HTML. В частности выполняются такие замены:
<заменяется на<>заменяется на>'(одинарная кавычка) заменяется на'"(двойная кавычка) заменяется на"&заменяется на&
Применение escape к переменной, которая уже была экранирована с помощью авто-экранирования, безопасно. Будет применено только одно экранирование. Так что безопасно использовать его с авто-экранированием. Если вам нужно применить экранирование несколько раз, используйте force_escape.
For example, you can apply escape to fields when autoescape is off:
{% autoescape off %}
{{ title|escape }}
{% endautoescape %}
escapejs¶
Escapes characters for use in JavaScript strings. This does not make the string safe for use in HTML or JavaScript template literals, but does protect you from syntax errors when using templates to generate JavaScript/JSON.
Например:
{{ value|escapejs }}
If value is "testing\r\njavascript 'string\" <b>escaping</b>",
the output will be "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 не соответствует Международной системе единиц, которая рекомендует использовать кибибайт, мебибайт, гибибайт, и т.д. когда размеры байта вычислены в степени 1024 (данный случай). Вместо этого Django использует традиционные имена для единиц измерений (Кбайт, Мбайт, Гбайт, и т.д.) соответствующие именам, которые используются обычно.
first¶
Возвращает первый элемент списка.
Например:
{{ value|first }}
Если value равно ['a', 'b', 'c'], будет возвращено 'a'.
floatformat¶
При использовании без аргументов, округляет число с плавающей запятой до одной десятой. Дробная часть отображается только, если существует. Например:
|
Шаблон |
Вывод |
|---|---|---|
|
|
|
|
|
|
|
|
|
Если используется целочисленный аргумент, floatformat округляет до указанного количества знаков после запятой. Например:
|
Шаблон |
Вывод |
|---|---|---|
|
|
|
|
|
|
|
|
|
Особенно полезный передавать 0 (нуль) как параметр, который будет округлять значение с плавающей точкой к ближайшему целому.
|
Шаблон |
Вывод |
|---|---|---|
|
|
|
|
|
|
|
|
|
Если аргумент отрицательный, floatformat округляет до указанного количества знаков после запятой – но дробная часть отображается только если существует. Например:
|
Шаблон |
Вывод |
|---|---|---|
|
|
|
|
|
|
|
|
|
Использование floatformat без аргументов эквивалентно floatformat с -1.
In older versions, a negative zero -0 was returned for negative numbers
which round to zero.
force_escape¶
Применяет экранирование HTML к строке (смотрите escape). Это фильтр применяется сразу и возвращает новую экранированную строку. Это полезно в редких случаях, если вам необходимо применить экранирование несколько раз, или если необходимо применить другие фильтры в экранированной строке.
For example, if you want to catch the <p> HTML elements created by
the linebreaks filter:
{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}
get_digit¶
Принимает число и возвращает запрашиваемую цифру, где 1 самая правая цифра, 2 - вторая справа, и тд. Возвращает оригинальное значение, если оно не верно (не число или меньше 1). В противном случае, всегда выводится целое число.
Например:
{{ value|get_digit:"2" }}
Если value равно 123456789, будет выведено 8.
iriencode¶
Конвертирует IRI (Internationalized Resource Identifier) в строку, которая может быть использована в URL. Это необходимо, если вы хотите использовать не ASCII символы в URL.
Можно использовать этот фильтр после использования фильтра urlencode.
Например:
{{ value|iriencode }}
If value is "?test=1&me=2", the output will be "?test=1&me=2".
in¶
Объединяет список, используя указанную строку, аналог str.join(list) в Python
Например:
{{ value|join:" // " }}
Если value равно списку ['a', 'b', 'c'], вывод будет "a // b // c".
striptags¶
Безопасно выводит объект Python в формате JSON, завернутый в тег <script> и готовый к использованию с JavaScript.
Argument: HTML «id» of the <script> tag.
Например:
{{ value|json_script:"hello-data" }}
Если value равно ['a', 'b', 'c'], будет возвращено 'a'.
<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>
Это совместимо со строгой политикой безопасности контента, которая запрещает выполнение внутристраничных сценариев. Он также поддерживает четкое разделение между пассивными данными и исполняемым кодом.
forloop.last¶
Возвращает последний элемент списка.
Например:
{{ value|last }}
Если value равно ['a', 'b', 'c', 'd'], выведет "d".
length¶
Возвращает размер значения. Работает для строк и списков.
Например:
{{ value|length }}
Если value равно ['a', 'b', 'c', 'd'] или "abcd", выведет 4.
Фильтр возвращает 0 для неопределенных переменных. Ранее возвращал пустую строку.
length_is¶
Returns True if the value’s length is the argument, or False otherwise.
Например:
{{ value|length_is:"4" }}
If value is ['a', 'b', 'c', 'd'] or "abcd", the output will be
True.
linebreaks¶
Заменяет переносы строки аналогами из HTML; один перенос строки будет заменен на <br />, новая строка с предыдущей пустой строкой оборачиваются в тег </p>.
Например:
{{ value|linebreaks }}
Если value равно Joel\nis a slug, вывод будет <p>Joel<br />is a slug</p>.
linebreaksbr¶
Заменяет все переносы строки на <br />.
Например:
{{ value|linebreaksbr }}
Если value равно Joel\nis a slug, вывод будет Joel<br />is a slug.
linenumbers¶
Отображает текст с номерами строк.
Например:
{{ value|linenumbers }}
If value is:
one
two
three
the output will be:
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¶
Превращает значение в список. Для строк это будет список символов. Число сначала конвертируется в unicode, а потом в список.
Например:
{{ value|make_list }}
Если value равно строке "Joel", будет возвращен список ['J', 'o', 'e', 'l']. Если value равно 123, вернет список ['1', '2', '3'].
phone2numeric¶
Преобразует телефонный номер (возможно, содержащий буквы) в его числовой эквивалент.
Значение не должно быть правильным телефонным номером, будет преобразована любая строка.
Например:
{{ value|phone2numeric }}
Если value равно 800-COLLECT, выведет 800-2655328.
pluralize¶
Возвращает суффикс множественного числа, если значение не 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 экранирования. Если авто-экранирование отключено, этот фильтр ничего не изменит.
Примечание
If you are chaining filters, a filter applied after safe can
make the contents unsafe again. For example, the following code
prints the variable as is, unescaped:
{{ var|safe|escape }}
safeseq¶
Applies the safe filter to each element of a sequence. Useful in
conjunction with other filters that operate on sequences, such as
join. For example:
{{ some_list|safeseq|join:", " }}
Вы не можете использовать фильтр safe в таком случае, так как он сначала преобразует значение в строку.
slice¶
Возвращает срез списка.
Uses the same syntax as Python’s list slicing. See https://www.diveinto.org/python3/native-datatypes.html#slicinglists for an introduction.
Например:
{{ 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¶
Форматирует значение в соответствии с аргументом, который является спецификатором форматирования строк. Спецификатор использует синтаксис форматирования строк Python, с той лишь разницей, что ведущий символ «%» опущен.
Например:
{{ 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".
Безопасность не гарантируется
Note that striptags doesn’t give any guarantee about its output being
HTML safe, particularly with non valid HTML input. So NEVER apply the
safe filter to a striptags output. If you are looking for something
more robust, you can use the bleach Python library, notably its
clean method.
datetimes¶
Форматирует время в соответствии с указанным форматом.
Можно использовать предопределенный TIME_FORMAT, или собственный формат аналогичный формату описанному в date. Заметим, что предопределенный формат зависит от текущего языка.
Например:
{{ value|time:"H:i" }}
Если value равно datetime.datetime.now(), может вернуть "01:23".
Note that you can backslash-escape a format string if you want to use the «raw» value. In this example, both «h» and «m» are backslash-escaped, because otherwise each is a format string that displays the hour and the month, respectively:
{% value|time:"H\h i\m" %}
Этот пример выведет «It is the 4th of September».
Другой пример:
Assuming that USE_L10N is True and LANGUAGE_CODE is,
for example, "de", then for:
{{ value|time:"TIME_FORMAT" }}
будет возвращена строка "01:23:00" (формат "TIME_FORMAT" для языка de определен в Django как "H:i:s").
Фильтр time принимает только строку формата, который относится к времени, а не дате (по понятным причинам). Если вам нужно отформатировать дату, используйте фильтр date (или вместе с time, если необходимо вывести полное значение datetime).
Есть одно исключение: если передано значение datetime с указанным часовым поясом (time-zone-aware datetime объект) фильтр time принимает параметры форматирования для часового пояса, такие как 'e', 'O' , 'T' и 'Z'.
When used without a format string, the TIME_FORMAT format specifier is
used:
{{ value|time }}
is the same as:
{{ value|time:"TIME_FORMAT" }}
timesince¶
Форматирует дату как время прошедшее с момента другой даты (например, «4 days, 6 hours»).
Takes an optional argument that is a variable containing the date to use as
the comparison point (without the argument, the comparison point is now).
For example, if blog_date is a date instance representing midnight on 1
June 2006, and comment_date is a date instance for 08:00 on 1 June 2006,
then the following would return «8 hours»:
{{ blog_date|timesince:comment_date }}
Сравнение абсолютной(с временной зоной) и относительной(без временной зоны) дат вернет пустую строку.
Минута - самая малая единица измерения, и для дат из будущего, относительно точки сравнения, возвращается «0 минут» .
timeuntil¶
Аналогичен timesince, только определяет время от текущей даты до указанной. Например, если сегодня 1 июня 2006 и conference_date это дата 29 июня 2006, тогда {{ conference_date|timeuntil }} вернет «4 недели».
Takes an optional argument that is a variable containing the date to use as
the comparison point (instead of now). If from_date contains 22 June
2006, then the following will return «1 week»:
{{ 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>".
Символы новой строки в содержимом будут сохранены.
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>".
Символы новой строки в содержимом будут сохранены.
unordered_list¶
Recursively takes a self-nested list and returns an HTML unordered list – WITHOUT opening and closing <ul> tags.
The list is assumed to be in the proper format. For example, if var
contains ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then
{{ var|unordered_list }} would return:
<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".
Используй необязательный аргумент, можно указать символы, который не должны быть экранированы.
If not provided, the „/“ character is assumed safe. An empty string can be provided when all characters should be escaped. For example:
{{ value|urlencode:"" }}
Если value равно "https://www.example.org/", будет возвращено "https%3A%2F%2Fwww.example.org%2F".
urlize¶
Конвертирует URL-ы и email-ы в тексте в «кликабельные» ссылки.
This template tag works on links prefixed with http://, https://, or
www.. For example, https://goo.gl/aia1t will get converted but
goo.gl/aia1t won’t.
Поддерживаются ссылки состоящие только из домена и заканчивающиеся на один из первоначальных доменов первого уровня (.com, .edu, .gov, .int, .mil, .net, and .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 также преобразует email-ы в ссылки с mailto:. Если value содержит "Send questions to foo@example.com", результат будет "Send questions to <a href="mailto:foo@example.com">foo@example.com</a>".
Фильтр urlize принимает необязательный аргумент autoescape. Если autoescape равен True, текст ссылки и URL будут экранированы с помощью фильтра escape. Значение по-умолчанию для autoescape равно True.
Примечание
Если применить urlize к тексту, который содержит HTML, результат будет неверным. Применяйте фильтр только к обычному тексту.
urlizetrunc¶
Преобразует URL-ы в ссылки как и urlize, но обрезает название ссылок длиннее указанного предела.
Аргумент: Максимальное количество символов в названии ссылки, включая многоточие, добавленное при обрезании текста.
Например:
{{ value|urlizetrunc:15 }}
Если value равно "Check out www.djangoproject.com", вернет 'Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangopr...</a>'.
Как и urlize, фильтр следует применять к обычному тексту.
wordcount¶
Возвращает количество слов.
Например:
{{ value|wordcount }}
Если value равно "Joel is a slug", вернет 4.
wordwrap¶
«Оборачивает» слова до указанной длины строки.
Аргумент: количество символов в строке
Например:
{{ value|wordwrap:5 }}
If value is Joel is a slug, the output would be:
Joel
is a
slug
yes¶
Для True, False и (опционально) None выводит строки «yes», «no», «maybe», или другие, переданные как список значений, разделенный запятыми:
Например:
{{ value|yesno:"yeah,no,maybe" }}
Значение |
Аргумент |
Вывод |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Теги и фильтры для интернационализация¶
Django предоставляет теги и фильтры для управления интернационализацией в шаблонах. Они предоставляют контроль за переводом, форматированием и преобразованием часового пояса.
i18n¶
Эта библиотека позволяет определять переводимый текст в шаблонах. Для включения установите настройку USE_I18N в True, потом загрузите библиотеку, добавив {% load i18n %} в шаблон.
Смотрите Интернационализация: в коде шаблонов.
l10n¶
This library provides control over the localization of values in templates.
You only need to load the library using {% load l10n %}, but you’ll often
set USE_L10N to True so that localization is active by default.
Смотрите Управление локализацией в шаблонах.
тц¶
Эта библиотека предоставляет возможность преобразовывать временные зоны в шаблонах. Как и l10n, просто загрузите библиотеку {% load tz %}. Но если установить USE_TZ в True, преобразование в локальное время будет происходить автоматически.
Другие библиотеки тегов и фильтров¶
Django содержит несколько других библиотек тегов. Чтобы их использовать, добавьте приложение в INSTALLED_APPS и загрузите библиотеку тегом {% load %}.
django.contrib.humanize¶
Набор фильтров для добавления «человечности» вашим данным. Смотрите django.contrib.humanize.
static¶
static¶
To link to static files that are saved in STATIC_ROOT Django ships
with a static template tag. If the django.contrib.staticfiles
app is installed, the tag will serve files using url() method of the
storage specified by STATICFILES_STORAGE. For example:
{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!">
It is also able to consume standard context variables, e.g. assuming a
user_stylesheet variable is passed to the template:
{% load static %}
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen">
If you’d like to retrieve a static URL without displaying it, you can use a slightly different call:
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}">
Использование шаблонов Jinja2?
См. Jinja2 для получения информации об использовании тега static с Jinja2.
get_static_prefix¶
You should prefer the static template tag, but if you need more control
over exactly where and how STATIC_URL is injected into the template,
you can use the get_static_prefix template tag:
{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!">
There’s also a second form you can use to avoid extra processing if you need the value multiple times:
{% 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¶
Similar to the get_static_prefix, get_media_prefix populates a
template variable with the media prefix MEDIA_URL, e.g.:
{% load static %}
<body data-media-url="{% get_media_prefix %}">
Сохранив значение в атрибуте data, мы можем использовать его в JavaScript и быть уверенными, что это значение правильно экранировано и безопасно.