Spec-Zone.ru › Django 1.9

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

Этот документ описывает встроенные теги и фильтры 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, как описано в документации по Защита от межсайтовых поддельных запросов (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 %} имя с помощью «as», как показано ниже:

{% 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, использование {% 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 %}

Устарело начиная с версии 1.9: Тег {% cycle %} поддерживает гораздо менее совершенный старый синтаксис из предыдущих версий Django. Вам не следует использовать его в новых проектах, но ради тех, кто все еще использует его, вот как он выглядит:

{% cycle row1,row2,row3 %}

В этом синтаксисе каждое значение интерпретируется как строковый литерал, и нет способа указать переменные, литеральные запятые или пробелы. Поддержка этого синтаксиса будет удалена в Django 1.10.

debug

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

extends

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

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

  • {% extends "base.html" %} (в кавычках) использует литеральное значение "base.html" как имя родительского шаблона для расширения.
  • {% extends variable %} использует значение variable. Если переменная вычисляется как строка, Django использует эту строку как имя родительского шаблона. Если переменная вычисляется как объект Template, Django использует этот объект как родительский шаблон.

Подробнее см. Наследование шаблонов.

filter

Фильтрует содержимое блока с помощью одного или нескольких фильтров. Несколько фильтров можно указать с помощью символов «|», а фильтры могут иметь аргументы, точно так же, как и в синтаксисе переменных.

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

Пример использования:

{% filter force_escape|lower %}
    This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}

Примечание

Фильтры escape и safe не являются допустимыми аргументами. Вместо этого используйте тег autoescape для управления автоматической экранизацией блоков кода шаблона.

firstof

Выводит первую переменную аргумента, которая не False. Выводит ничего, если все переданные переменные False.

Пример использования:

{% 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 %} для хранения результата внутри переменной.

Синтаксис «as» был добавлен.

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 True, если это первая итерация цикла
forloop.last True, если это последняя итерация цикла
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 теги также могут использовать операторы ==, !=, <, >, <=, >= и >= , которые работают следующим образом:

== оператор

Равенство. Пример:

{% 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.

Операторы сравнения не могут быть «цепными», как в Python или в математической записи. Например, вместо использования:

{% if a > b > c %}  (WRONG)

следует использовать:

{% if a > b and b > c %}

Фильтры

Вы также можете использовать фильтры в выражении 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. Иногда это предпочтительнее для ясности, особенно для тех, кто не знает правил приоритета.

ifequal и ifnotequal

{% ifequal a b %} ... {% endifequal %} — устаревший способ записи {% if a == b %} ... {% endif %}. Аналогично, {% ifnotequal a b %} ... {% endifnotequal %} заменён на {% if a != b %} ... {% endif %}. Теги ifequal и ifnotequal будут устаревшими в будущих выпусках.

ifchanged

Проверка, изменилось ли значение с последней итерации цикла.

Тег-блок {% ifchanged %} используется внутри цикла. Он имеет два возможных применения.

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

    <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 %}
    
  2. Если задана одна или несколько переменных, проверяет, изменилась ли хотя бы одна из них. Например, следующий код показывает дату каждый раз, когда она меняется, а также время, если изменилось либо время, либо дата:

    {% 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" %}

В этом примере включается содержимое шаблона, имя которого находится в переменной template_name:

{% include template_name %}

Переменная также может быть любым объектом с методом render() , принимающим контекст. Это позволяет вам ссылаться на скомпилированный 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 %}

Если включённый шаблон вызывает исключение во время рендеринга (включая случаи отсутствия шаблона или синтаксических ошибок), поведение зависит от опции template engine's debug (если не установлено, эта опция по умолчанию совпадает со значением DEBUG). При включённом режиме отладки исключения, такие как TemplateDoesNotExist или TemplateSyntaxError, будут подняты. При выключенном режиме отладки {% include %} записывает предупреждение в логгер django.template с исключением, произошедшим во время рендеринга включённого шаблона, и возвращает пустую строку.

В логах шаблонов теперь также включены предупреждения, упомянутые выше.

Примечание

Тег include следует рассматривать как реализацию «отрендерить этот подшаблон и включить HTML», а не как «распарсить этот подшаблон и включить его содержимое, как если бы оно было частью родительского шаблона». Это означает, что нет общего состояния между включёнными шаблонами — каждый include — это полностью независимый процесс рендеринга.

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

load

Загрузка набора пользовательских тегов шаблона.

Например, следующий шаблон загрузит все теги и фильтры, зарегистрированные в somelibrary и otherlibrary в пакете package:

{% load somelibrary package.otherlibrary %}

Вы также можете выборочно загружать отдельные фильтры или теги из библиотеки, используя аргумент from. В этом примере будут загружены теги/фильтры с именами foo и bar из somelibrary:

{% load foo bar from somelibrary %}

См. Библиотеки пользовательских тегов и фильтров для получения дополнительной информации.

lorem

Этот тег ранее находился в django.contrib.webdesign.

Отображение случайного латинского текста «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” и два случайных абзаца, каждый из которых заключён в HTML-теги <p>.
  • {% 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 %} внутри тега шаблона, например, blocktrans:

{% now "Y" as current_year %}
{% blocktrans %}Copyright {{ current_year }}{% endblocktrans %}

Возможность использования синтаксиса “as” была добавлена.

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

Вы можете использовать тег {% regroup %} для группировки списка городов по стране. Следующий фрагмент кода шаблона позволит сделать это:

{% regroup cities by country as country_list %}

<ul>
{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for item in country.list %}
          <li>{{ item.name }}: {{ item.population }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

Давайте разберём этот пример. {% regroup %} принимает три аргумента: список, который нужно сгруппировать, атрибут для группировки и имя результирующего списка. Здесь мы группируем список cities по атрибуту country и называем результат country_list.

{% regroup %} создаёт список (в данном случае country_list) из **объектов группы**. Каждый объект группы имеет два атрибута:

  • grouper – элемент, по которому производилась группировка (например, строка «Индия» или «Япония»).
  • list – список всех элементов в этой группе (например, список всех городов с country=’Индия’).

Обратите внимание, что {% 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
  • Япония
    • Токио: 33 000 000

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

Другое решение — отсортировать данные в шаблоне с помощью фильтра dictsort, если ваши данные находятся в списке словарей:

{% regroup cities|dictsort:"country" by country as country_list %}

Группировка по другим свойствам

Любой допустимый поиск шаблона является законным атрибутом группировки для тега regroup, включая методы, атрибуты, ключи словарей и элементы списков. Например, если поле «country» является внешним ключом для класса с атрибутом «description», вы можете использовать:

{% 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, а не ключи.

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 %}

ssi

Устаревшее с версии 1.8: Этот тег устарел и будет удалён в Django 1.10. Используйте тег include вместо него.

Выводит содержимое заданного файла в страницу.

Как и простой тег include, {% ssi %} включает содержимое другого файла — который должен быть указан с абсолютным путём — в текущей странице:

{% ssi '/home/html/ljworld.com/includes/right_generic.html' %}

Первый параметр ssi может быть строковым литералом или любой другой переменной контекста.

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

{% ssi '/home/html/ljworld.com/includes/right_generic.html' parsed %}

Обратите внимание, что если вы используете {% ssi %}, вам необходимо определить 'allowed_include_roots' в OPTIONS вашей движка шаблонов, как меры безопасности.

Примечание

С тегом ssi и параметром parsed нет общей области состояний между файлами — каждый включённый файл представляет собой полностью независимый процесс рендеринга. Это означает, что, например, невозможно определить блоки или изменить контекст на текущей странице с помощью включённого файла.

См. также: {% include %}.

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() name. Он может быть строковым литералом или любой другой переменной контекста. Дополнительные аргументы необязательны и должны быть значениями, разделёнными пробелами, которые будут использоваться в качестве аргументов в URL. В приведённом примере показано использование позиционных аргументов. В качестве альтернативы можно использовать синтаксис с ключевыми словами:

{% url 'some-url-name' arg1=v1 arg2=v2 %}

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

Например, предположим, что у вас есть представление, app_views.client, чья URLconf принимает идентификатор клиента (здесь, client() — метод внутри файла представлений app_views.py). Строка URLconf может выглядеть так:

('^client/([0-9]+)/$', app_views.client, name='app-views-client')

Если URLconf этого приложения включен в URLconf проекта по такому пути:

('^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 с именованным пространством имён, включая использование любых подсказок, предоставленных контекстом относительно текущего приложения.

Устарело начиная с версии 1.8: Вы также можете передать точку с запятой Python-путь к функции представления, но этот синтаксис устарел и будет удален в Django 1.10:

{% url 'path.to.some_view' v1 v2 %}

Предупреждение

Не забывайте заключать в кавычки url() name, в противном случае значение будет интерпретироваться как переменная контекста!

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 в переменной. Это может быть полезно, например, в теге blocktrans так:

{% widthratio this_value max_value max_width as width %}
{% blocktrans %}The width is: {{ width }}{% endblocktrans %}

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

Форматирует дату в соответствии с заданным форматом.

Использует формат, аналогичный функции date() PHP (https://php.net/date) с некоторыми отличиями.

Примечание

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

Доступные строки формата:

Символ формата Описание Пример вывода
a 'a.m.' или 'p.m.' (Обратите внимание, что это немного отличается от вывода PHP, потому что сюда добавлены точки для соответствия стилю Associated Press.) 'a.m.'
A 'AM' или 'PM'. 'AM'
b Месяц, текстовый, 3 буквы, строчные. 'jan'
B Не реализовано.
c Формат ISO 8601. (Примечание: в отличие от других форматеров, таких как «Z», «O» или «r», форматер «c» не добавляет смещение часового пояса, если значение является datetime без часового пояса (см. datetime.tzinfo). 2008-01-02T10:30:00.000123+02:00, или 2008-01-02T10:30:00.000123 если datetime не содержит часового пояса
d День месяца, 2 цифры с ведущими нулями. '01' до '31'
D День недели, текстовый, 3 буквы. 'Fri'
e Имя часового пояса. Может быть в любом формате или возвращать пустую строку, в зависимости от datetime. '', 'GMT', '-500', 'US/Eastern', и т.д.
E Месяц, альтернативное представление, специфичное для локали, обычно используемое для представления длинных дат. 'listopada' (для польской локали, в отличие от 'Listopad')
f Время, в формате 12-часовых часов и минут, с опущенными минутами, если они нулевые. Собственная расширение. '1', '1:30'
F Месяц, текстовый, полный. 'January'
g Часы, 12-часовой формат без ведущих нулей. '1' до '12'
G Часы, 24-часовой формат без ведущих нулей. '0' до '23'
h Часы, 12-часовой формат. '01' до '12'
H Часы, 24-часовой формат. '00' до '23'
i Минуты. '00' до '59'
I Летнее время, действует или нет. '1' или '0'
j День месяца без ведущих нулей. '1' до '31'
l День недели, текстовый, полный. 'Friday'
L Булево значение, високосный ли год. True или False
m Месяц, 2 цифры с ведущими нулями. '01' до '12'
M Месяц, текстовый, 3 буквы. 'Jan'
n Месяц без ведущих нулей. '1' до '12'
N Аббревиатура месяца в стиле Associated Press. Собственное расширение. 'Jan.', 'Feb.', 'March', 'May'
o Год по ISO-8601 с учетом нумерации недель, соответствующий неделе ISO-8601 (W), которая использует високосные недели. См. Y для более распространенного формата года. '1999'
O Разница с Гринвичем в часах. '+0200'
P Время, в формате 12-часовых часов, минут и «ч.»/«в.» с опущенными минутами, если они нулевые, и специальными строками «полночь» и «полдень», если применимо. Собственное расширение. '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.'
r RFC 2822 отформатированная дата. 'Thu, 21 Dec 2000 16:01:07 +0200'
s Секунды, 2 цифры с ведущими нулями. '00' до '59'
S Английское порядковое окончание для дня месяца, 2 символа. 'st', 'nd', 'rd' или 'th'
t Количество дней в данном месяце. 28 до 31
T Часовой пояс этой машины. 'EST', 'MDT'
u Микросекунды. 000000 до 999999
U Секунды с момента эпохи Unix (1 января 1970 года 00:00:00 UTC).
w День недели, цифры без ведущих нулей. '0' (воскресенье) до '6' (суббота)
W Номер недели года по ISO-8601, с началом недель в понедельник. 1, 53
y Год, 2 цифры. '99'
Y Год, 4 цифры. '1999'
z Номер дня в году. 0 до 365
Z Смещение часового пояса во секундах. Смещение для часовых поясов западнее UTC всегда отрицательное, а для тех, что восточнее UTC, всегда положительное. -43200 до 43200

Например:

{{ 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").

При использовании без строки формата:

{{ value|date }}

…будет использоваться строка форматирования, определённая в настройке DATE_FORMAT, без применения локализации.

Вы можете объединить 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)

dictsortreversed

Принимает список словарей и возвращает этот список, отсортированный в обратном порядке по ключу, указанному в аргументе. Работает точно так же, как и вышеуказанный фильтр, но возвращаемое значение будет в обратном порядке.

divisibleby

Возвращает True если значение делится на аргумент.

Например:

{{ value|divisibleby:"3" }}

Если value равно 21, вывод будет True.

escape

Экранирует HTML строки. Конкретно, он производит следующие замены:

  • < преобразуется в &lt;
  • > преобразуется в &gt;
  • ' (одинарная кавычка) преобразуется в &#39;
  • " (двойная кавычка) преобразуется в &quot;
  • & преобразуется в &amp;

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

Применение escape к переменной, к результату которой обычно применяется автоматическое экранирование, приведет только к одному циклу экранирования. Поэтому эту функцию безопасно использовать даже в средах с автоматическим экранированием. Если вам нужно применить несколько циклов экранирования, используйте фильтр force_escape.

Например, вы можете применить escape к полям, когда autoescape отключен:

{% autoescape off %}
    {{ title|escape }}
{% endautoescape %}

escapejs

Экранирует символы для использования в строках JavaScript. Это не делает строку безопасной для использования в HTML, но защищает вас от синтаксических ошибок при использовании шаблонов для генерации 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 использует традиционные единицы (KB, MB, GB и т. д.), которые чаще используются.

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 без аргумента эквивалентно использованию floatformat с аргументом -1.

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. Это необходимо, если вы пытаетесь использовать строки, содержащие не-ASCII символы в URL.

Безопасно использовать этот фильтр для строки, которая уже прошла через фильтр urlencode.

Например:

{{ value|iriencode }}

Если value равно "?test=1&me=2", вывод будет "?test=1&amp;me=2".

join

Объединяет список со строкой, как в Python's str.join(list)

Например:

{{ value|join:" // " }}

Если value — список ['a', 'b', 'c'], вывод будет строкой "a // b // c".

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; одна новая строка становится HTML-переводом строки (<br />) и новая строка, за которой следует пустая строка, становится переводом абзаца (</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

Возвращает значение, преобразованное в список. Для строки это список символов. Для целого числа аргумент преобразуется в строку 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" }}.

Примечание

Используйте blocktrans для образования множественного числа переведённых строк.

pprint

Обёртка вокруг pprint.pprint() — в основном для отладки.

random

Возвращает случайный элемент из заданного списка.

Например:

{{ value|random }}

Если value — список ['a', 'b', 'c', 'd'], результат может быть "b".

removetags

Устаревшее с версии 1.8: removetags не может гарантировать безопасность HTML-вывода и устарело из-за проблем с безопасностью. Вместо него рекомендуется использовать bleach.

Удаляет из вывода список [X]HTML-тегов, разделённых пробелами.

Например:

{{ value|removetags:"b span" }}

Если value равно "<b>Joel</b> <button>is</button> a <span>slug</span>", необработанный вывод будет "Joel <button>is</button> a slug".

Обратите внимание, что этот фильтр чувствителен к регистру.

Если value равно "<B>Joel</B> <button>is</button> a <span>slug</span>", необработанный вывод будет "<B>Joel</B> <button>is</button> a slug".

Гарантия безопасности отсутствует

Обратите внимание, что removetags не гарантирует безопасность HTML-вывода, особенно при некорректном HTML-вводе. Поэтому НИКОГДА не применяйте фильтр safe к результату removetags. Если вам нужна более надёжная функция, используйте библиотеку bleach Python, в частности, метод clean.

rjust

Выравнивает значение по правому краю в поле заданной ширины.

Аргумент: размер поля

Например:

"{{ value|rjust:"10" }}"

Если value равно Django, результат будет "    Django".

safe

Помечает строку как не требующую дальнейшей обработки HTML-экранирования перед выводом. При выключенном автоматическом экранировании этот фильтр не имеет эффекта.

Примечание

Если вы применяете фильтры последовательно, фильтр, применённый после safe, может снова сделать содержимое небезопасным. Например, следующий код выводит переменную без экранирования:

{{ var|safe|escape }}

safeseq

Применяет фильтр safe к каждому элементу последовательности. Полезно в сочетании с другими фильтрами, работающими с последовательностями, такими как join. Например:

{{ some_list|safeseq|join:", " }}

В данном случае вы не могли напрямую использовать фильтр safe, так как он сначала конвертировал бы переменную в строку, а не работал бы с отдельными элементами последовательности.

slice

Возвращает срез списка.

Использует ту же синтаксис, что и срезы списков в Python. Смотрите http://www.diveintopython3.net/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-style String Formatting, за исключением того, что ведущий «%» опускается.

Например:

{{ 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, в частности, метод clean.

time

Форматирует время в соответствии с заданным форматом.

Заданный формат может быть предопределённым TIME_FORMAT, или пользовательским форматом, аналогично фильтру date. Обратите внимание, что предопределённый формат зависит от локали.

Например:

{{ value|time:"H:i" }}

Если value эквивалентно datetime.datetime.now(), результат будет строкой "01:23".

Другой пример:

Предполагая, что USE_L10N равно True и LANGUAGE_CODE равно, например, "de", то для:

{{ value|time:"TIME_FORMAT" }}

результатом будет строка "01:23:00" (спецификатор формата "TIME_FORMAT" для локали de в Django — "H:i:s").

Фильтр time будет принимать только параметры в строке формата, относящиеся к времени суток, а не к дате (по очевидным причинам). Если вам нужно отформатировать значение date, используйте фильтр date (или вместе с time, если вам нужно отобразить полное значение datetime).

Есть одно исключение из этого правила: при передаче значения datetime с присоединённой информацией о часовом поясе (экземпляр datetime, учитывающий часовой пояс) фильтр time будет принимать спецификаторы формата, относящиеся к часовому поясу: 'e', 'O', 'T' и 'Z'.

При использовании без строки формата:

{{ 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, за исключением того, что оно измеряет время от сейчас до заданной даты или времени. Например, если сегодня 1 июня 2006 года, а conference_date — экземпляр даты, содержащий 29 июня 2006 года, то {{ conference_date|timeuntil }} вернёт «4 недели».

Принимает необязательный аргумент, являющийся переменной, содержащей дату, используемую в качестве точки сравнения (вместо текущего момента). Если from_date содержит 22 июня 2006 года, то следующее вернет «1 неделя»:

{{ conference_date|timeuntil:from_date }}

Сравнение часовых поясов offset-naive и offset-aware datetimes вернет пустую строку.

Минуты являются наименьшей используемой единицей, и «0 минут» будет возвращено для любой даты, которая находится в прошлом относительно точки сравнения.

title

Преобразует строку в заголовок, делая слова, начинающимися с заглавной буквы, а остальные символы — строчными. Этот тег не пытается сохранить «тривиальные слова» строчными.

Например:

{{ value|title }}

Если value равно "my FIRST post", результат будет "My First Post".

truncatechars

Усекает строку, если она длиннее заданного числа символов. Усеченные строки будут заканчиваться переводимым многоточием («…»).

Аргумент: Количество символов для усечения

Например:

{{ value|truncatechars:9 }}

Если value равно "Joel is a slug", результат будет "Joel i...".

truncatechars_html

Аналогично truncatechars, за исключением того, что он учитывает HTML-теги. Любые теги, открытые в строке и не закрытые до точки усечения, закрываются сразу после усечения.

Например:

{{ value|truncatechars_html:9 }}

Если 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>

Устаревшее с версии 1.8: Также поддерживается более старый, более ограниченный и подробный формат ввода: ['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]. Поддержка этой синтаксической конструкции будет удалена в Django 1.10.

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://, или https://. Например, https://goo.gl/aia1t будет преобразован, а goo.gl/aia1t — нет.

Он также поддерживает ссылки только на домен, заканчивающиеся одним из оригинальных доменных имен верхнего уровня (.com, .edu, .gov, .int, .mil, .net, и .org). Например, djangoproject.com преобразуется.

Добавлена поддержка ссылок только на домен, содержащих символы после доменного имени верхнего уровня (например, djangoproject.com/ и djangoproject.com/download/).

Ссылки могут иметь знаки препинания в конце (точки, запятые, закрывающие скобки) и в начале (открывающие скобки), и 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 foo@example.com", результат будет "Send questions to <a href="mailto:foo@example.com">foo@example.com</a>".

Фильтр urlize также принимает необязательный параметр autoescape. Если autoescape равно True, текст ссылки и URL будут экранированы с помощью встроенного фильтра Django 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.djangopr...</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. Его можно использовать независимо от того, используете ли вы RequestContext или нет. Например:

{% 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 }}"></img>

Примечание

Приложение contrib staticfiles также поставляется с тегом static template tag, который использует staticfiles' STATICFILES_STORAGE для построения URL указанного пути (а не просто использование urllib.parse.urljoin() с настройкой STATIC_URL и указанным путём). Используйте его, если у вас есть сложный случай использования, например, использование облачной службы для предоставления статических файлов:

{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

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.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API