# Вбудовані фільтри Jinja2

### Как применять фильтры к переменным.

В шаблонах Jinja2, переменные могут быть изменены фильтрами. Фильтры отделяются от переменной символом канала `'|'` и могут иметь необязательные аргументы в круглых скобках. Несколько фильтров могут быть объединены в цепочку. Выход одного фильтра применяется к следующему.

Например, выражение в шаблоне `{{ name|striptags|title }}` удалит все HTML-теги из переменной `name`, а так же все слова будут начинаться с заглавной буквы.

Фильтры в шаблонах jinja2 принимают левую часть выражения в качестве первого аргумента, а аргументы, передаваемые в сам фильтр служат дополнительными позиционными или ключевыми аргументами. Например, в выражении шаблона `{{ lst|join(', ') }}` функция фильтра `join()` будет вызываться с аргументами `attr(lst, ', ')`.

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

```
{% filter upper %}
    Этот текст становится прописным
{% endfilter %}
```

### Все встроенные фильтры модуля Jinja2:

* `abs()` возвращает абсолютное значение,
* `attr()` возвращает атрибут объекта по имени,
* `batch()` делит исходную последовательность на списки с заданным количеством элементов,
* `capitalize()` преобразует первый символ строки в верхний регистр,
* `center()` центрирует значение в поле заданной ширины,
* `default()` возвращает значение по умолчанию, если переменная не определена,
* `dictsort()` сортирует словарь,
* `escape()` экранирует HTML,
* `filesizeformat()` форматирует значение как размер файла,
* `first()` возвращает первый элемент списка,
* `float()` преобразует значение в float,
* `forceescape()` принудительно экранирует HTML,
* `format()` форматирует строку в стиле printf,
* `groupby()` группирует последовательность объектов по атрибуту,
* `indent()` делает отступы для каждой строки,
* `int()` преобразует значение в int,
* `join()` объединяет список строк в одну строку,
* `last()` возвращает последний элемент списка,
* `length()` возвращает количество элементов в контейнере,
* `list()` преобразует значение в список,
* `lower()` преобразует строку в нижний регистр,
* `map()` извлекает определенный атрибут из списка объектов,
* `max()` возвращает максимальный элемент списка,
* `min()` возвращает минимальный элемент списка,
* `pprint()` красиво печатает переменную,
* `random()` возвращает случайный элемент из списка,
* `reject()` фильтрует последовательность, исключая те элементы, для которых тест вернул True,
* `rejectattr()` фильтрует список объектов, исключая те объекты, для которых тест атрибута объекта вернул True,
* `replace()` заменяет подстроку в строке на новое значение,
* `reverse()` переворачивает последовательность/контейнер,
* `round()` округляет число до заданной точности,
* `safe()` отменяет автоматическое экранирование HTML,
* `select()` фильтрует последовательность, исключая те элементы, для которых тест вернул False,
* `selectattr()` фильтрует список объектов, исключая те объекты, для которых тест атрибута объекта вернул False,
* `slice()` делит исходную последовательность на указанное количество списков,
* `sort()` сортирует последовательность,
* `string()` преобразует строку в unicode,
* `striptags()` удаляет теги HTML,
* `sum()` возвращает сумму последовательности чисел,
* `title()` все слова начинаются с прописных букв,
* `tojson()` преобразует структуру в JSON,
* `trim()` удаляет начальные и конечные символы,
* `truncate()` возвращает усеченную копию строки,
* `unique()` возвращает список уникальных элементов,
* `upper()` преобразует строку в верхний регистр,
* `urlencode()` преобразует данные для использования в URL,
* `urlize()` преобразует текстовые URL-адреса в ссылки,
* `wordcount()` считает слова в строке,
* `wordwrap()` форматирует строку до заданной ширины,
* `xmlattr()` создает атрибуты HTML на основе словаря.

***

_**`abs(x, /)`**_**:**

Фильтр `abs()` возвращает абсолютное значение аргумента..

_**`attr(obj, name)`**_**:**

Фильтр `attr()` получает атрибут объекта `obj` по его имени `name`. Выражение шаблона \{{ foo|attr("bar") \}} работает так же, как `foo.bar`, только всегда возвращается атрибут и элементы не просматриваются.

Дополнительные сведения смотрите в разделе "[Общий синтаксис шаблонов `jinja2`](https://docs-python.ru/packages/modul-jinja2-python/sintaksis-shablona-jinja2/)".

_**`batch(value, linecount, fill_with=None)`**_**:**

Фильтр `batch()` делит исходный список на списки с заданным количеством элементов, и возвращает список списков. Если указан аргумент `fill_with`, то он используется для заполнения недостающих элементов.

Смотрим пример:

```
<table>
{%- for row in items|batch(3, '&nbsp;') %}
  <tr>
  {%- for column in row %}
    <td>{{ column }}</td>
  {%- endfor %}
  </tr>
{%- endfor %}
</table>
```

_**`capitalize(s)`**_**:**

Фильтр `capitalize()` преобразует первый символ строки `s` в верхний регистр, все остальные символы будут - в нижнем регистре.

_**`center(value, width=80)`**_**:**

Фильтр `center()` центрирует значение `value` в поле заданной ширины `width`.

_**`default(value, default_value='', boolean=False)`**_**:**

Если переменная `value` не определена, то фильтр `default()` вернет значение аргумента `default_value`, в противном случае значение переменной `value`:

```
{{ my_variable|default('my_variable не определена') }}
```

Код выше выведет значение `my_variable`, если переменная была определена, если нет, то строку `'my_variable не определена'`. Если надо использовать значение по умолчанию с переменными, которые оцениваются как `False`, то необходимо установить аргумент `boolean=True`:

```
{{ ''|default('the string was empty', true) }}
```

_**`dictsort(value, case_sensitive=False, by='key', reverse=False)`**_**:**

Фильтр `dictsort()` сортирует [словарь](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-dict-slovar/) и возвращает парные [кортежи](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-tuple-kortezh/) `(key, value)`. Так как изначально словари Python не отсортированы, этот фильтр можно использовать, чтобы упорядочить их по ключу или значению:

```
{% for key, value in mydict|dictsort %}
    сортирует словарь по ключу, без учета регистра

{% for key, value in mydict|dictsort(reverse=true) %}
    сортирует словарь по ключу, без учета регистра, обратный порядок

{% for key, value in mydict|dictsort(true) %}
    сортирует словарь по ключу, с учетом регистра

{% for key, value in mydict|dictsort(false, 'value') %}
    сортирует словарь по значению, без учета регистра
```

_**`escape(s)`**_**:**

Фильтр `escape()` преобразует символы `&`, `<`, `>`, `'` и `”` в строках `s` в безопасные для HTML последовательности. Используйте фильтр, если необходимо отобразить текст, который может содержать такие символы в HTML. Помечает возвращаемое значение как [`Markup`](https://docs-python.ru/packages/modul-jinja2-python/funktsija-markup/).

_**`filesizeformat(value, binary=False)`**_**:**

Фильтр `filesizeformat()` форматирует значение как _удобочитаемый_ размер файла (например, 13 KB; 4,1 MB; 102 bytes и т. д.).

По умолчанию используются десятичные префиксы (Mega, Giga и т. д.), Если второй параметр имеет значение `True`, используются двоичные префиксы (Mebi, Gibi).

_**`first(seq)`**_**:**

Фильтр `first()` возвращает первый элемент последовательности..

_**`float(value, default=0.0)`**_**:**

Фильтр `float()` преобразует значение `value` в [число с плавающей запятой](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-float-veschestvennye-chisla/). Если преобразование невозможно, то возвращается 0,0. Можно изменить это значение по умолчанию.

_**`forceescape(value)`**_**:**

Фильтр `forceescape()` принудительно экранирует HTML. Если HTML-разметка уже имеет HTML-сущности, то применение этого фильтра, повторно экранирует HTML-сущности.

_**`format(value, *args, **kwargs)`**_**:**

Фильтр `format()` применяет заданные значения к строке формата [в стиле `printf`](https://docs-python.ru/tutorial/operatsii-tekstovymi-strokami-str-python/formatirovanie-strok-stile-printf/), например `string % values`.

```
{{ "%s, %s!"|format(greeting, name) }}
Hello, World!
```

В большинстве случаев, в шаблонах, удобнее и эффективнее использовать оператор `%` или [`str.format()`](https://docs-python.ru/tutorial/operatsii-tekstovymi-strokami-str-python/metod-str-format/).

```
{{ "%s, %s!" % (greeting, name) }}
{{ "{}, {}!".format(greeting, name) }}
```

_**`groupby(value, attribute)`**_**:**

Фильтр `groupby()` группирует последовательность объектов по атрибуту с помощью Python [`itertools.groupby()`](https://docs-python.ru/standart-library/modul-itertools-python/funktsija-groupby-modulja-itertools/). Атрибут может использовать точечную нотацию для вложенного доступа, например `'address.city'`. В отличие от Python `itertools.groupby()`, значения сортируются первыми, поэтому для каждого уникального значения возвращается только одна группа.

Например, список объектов `User` с атрибутом `city` может отображаться в группах. В этом примере `grouper` относится к значению `city` в группе.

```
<ul>{% for city, items in users|groupby("city") %}
  <li>{{ city }}
    <ul>{% for user in items %}
      <li>{{ user.name }}
    {% endfor %}</ul>
  </li>
{% endfor %}</ul>
```

Фильтр `groupby()` возвращает \[именованный кортеж] `(grouper, list)`, который можно использовать вместо распаковки кортежей, описанной выше.

* `grouper` - это значение атрибута,
* `list` - это элементы с этим значением.

```
<ul>{% for group in users|groupby("city") %}
  <li>{{ group.grouper }}: {{ group.list|join(", ") }}
{% endfor %}</ul>
```

_**`indent(s, width=4, first=False, blank=False, indentfirst=None)`**_**:**

Фильтр `indent()` возвращает копию строки `s` с отступом в 4 пробела для каждой строки. По умолчанию первая строка и пустые строки не имеют отступа.

Аргументы фильтра:

* `width` – Количество пробелов, на которые нужно сделать отступ.
* `first` – Не пропускает отступ в первой строке.
* `blank` – Не пропускает отступы в пустых строках.

_**`int(value, default=0, base=10)`**_**:**

Фильтр `int()` преобразует значение в [целое число](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-int-tselye-chisla/). Если преобразование невозможно, то возвращается 0. Можно изменить это значение по умолчанию. Можно также переопределить базу по умолчанию (10) аргументом `base`, который обрабатывает ввод с такими префиксами, как `0b`, `0o` и `0x` для оснований 2, 8 и 16 соответственно. База игнорируется для десятичных чисел и не строковых значений.

_**`join(value, d='', attribute=None)`**_**:**

Фильтр `join()` возвращает строку, которая является конкатенацией строк в [последовательности](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tipy-posledovatelnostej/) `value`.

Разделитель между элементами представляет собой пустую строку по умолчанию, можно определить ее с помощью необязательного параметра `d`:

```
{{ [1, 2, 3]|join('|') }}
    -> 1|2|3

{{ [1, 2, 3]|join }}
    -> 123
```

Также возможно объединение определенных атрибутов объекта:

```
{{ users|join(', ', attribute='username') }}
```

_**`last(seq)`**_**:**

Фильтр `last()` возвращает последний элемент последовательности `seq`.

**Примечание**: не работает с [генераторами](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-generator-generator/). Его можно явно преобразовать в список:

```
{{ data | selectattr('name', '==', 'Jinja') | list | last }}
```

_**`length(obj, /)`**_**:**

Фильтр `length()` возвращает количество элементов в контейнере.

_**`list(value)`**_**:**

Фильтр `list()` преобразует значение `value` в список. Если это была строка, то возвращаемый список будет списком символов строки.

_**`lower(s)`**_**:**

Фильтр `lower()` преобразует значение `value` в нижний регистр.

_**`map(*args, **kwargs)`**_**:**

Фильтр `map()` применяет фильтр к последовательности объектов или извлекает определенный атрибут у этих объектов. Фильтр полезен при работе со списками объектов, для которых интересно только их определенное значение.

Основное использование - отображение атрибута. Представьте, что есть список пользователей, но необходимо извлечь только список имен пользователей:

```
Пользователи на этой странице: {{ users|map(attribute='username')|join(', ') }}
```

Можно указать значение по умолчанию, которое будет использоваться, если объект в списке не имеет данного атрибута.

```
{{ users|map(attribute="username", default="Anonymous")|join(", ") }}
```

В качестве альтернативы можно позволить ему вызывать фильтр, передав впоследствии имя фильтра и аргументы. Хорошим примером может быть применение фильтра преобразования текста к последовательности:

```
Пользователи на этой странице: {{ titles|map('lower')|join(', ') }}
```

Аналогично [выражению-генератора](https://docs-python.ru/tutorial/generatory-python/vyrazhenie-generator/), такому как:

```
(u.username for u in users)
(u.username or "Anonymous" for u in users)
(do_lower(x) for x in titles)
```

Изменено в версии 2.11.0: Добавлен параметр по умолчанию.

_**`max(value, case_sensitive=False, attribute=None)`**_**:**

Фильтр `max()` возвращает самый большой элемент из последовательности.

```
{{ [1, 2, 3]|max }}
    -> 3
```

Аргументы фильтра:

* `case_sensitive` – рассматривает строки верхнего и нижнего регистра как отдельные.
* `attribute` – получает объект с максимальным значением этого атрибута.

_**`min(value, case_sensitive=False, attribute=None)`**_**:**

Фильтр `min()` возвращает самый маленький элемент из последовательности.

возвращает\{{ \[1, 2, 3]|min \}}-> 1\`\`\`

Аргументы фильтра:

* `case_sensitive` – рассматривает строки верхнего и нижнего регистра как отдельные.
* `attribute` – получает объект с максимальным значением этого атрибута.

_**`pprint(value, verbose=False)`**_**:**

Фильтр `pprint()` красиво печатает переменную `value`. Полезно для отладки.

_**`random(seq)`**_**:**

Фильтр `random()` возвращает случайный элемент из последовательности `seq`.

_**`reject(*args, **kwargs)`**_**:**

Фильтр `reject()` фильтрует последовательность объектов, применяя _тест_ к каждому объекту и отклоняя объекты при успешном выполнении теста.

Если _тест_ не указан, каждый объект будет оцениваться как логическое значение.

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

\{{ numbers|reject("odd") \}}

Работает подобно [выражению-генератора](https://docs-python.ru/tutorial/generatory-python/vyrazhenie-generator/), например:

```
(n for n in numbers if not test_odd(n))
```

_**`rejectattr(*args, **kwargs)`**_**:**

Фильтр `rejectattr()` фильтрует последовательность объектов, применяя _тест_ к указанному атрибуту каждого объекта и отклоняя объекты при успешном завершении _теста_.

Если _тест_ не указан, то значение атрибута будет оцениваться как логическое.

```
{{ users|rejectattr("is_active") }}
{{ users|rejectattr("email", "none") }}
```

Работает подобно [выражению-генератора](https://docs-python.ru/tutorial/generatory-python/vyrazhenie-generator/), например:

```
(u for user in users if not user.is_active)
(u for user in users if not test_none(user.email))
```

_**`replace(s, old, new, count=None)`**_**:**

Фильтр `replace()` возвращает копию строки `s` со всеми вхождениями `old`, замененными на `new`. Аргумент `old` - это подстрока, которую следует заменить, `new` - строка замены. Если указан необязательный аргумент `count`, то заменяются только `count` первых вхождений:

```
{{ "Hello World"|replace("Hello", "Goodbye") }}
    -> Goodbye World

{{ "aaaaargh"|replace("a", "d'oh, ", 2) }}
    -> d'oh, d'oh, aaargh
```

_**`reverse(value)`**_**:**

Фильтр `reverse()` переворачивает объект или возвращает \[итератор]\[t-iterator], который повторяет его в обратном порядке.

_**`round(value, precision=0, method='common')`**_**:**

Фильтр `round()` округляет число до заданной точности. Аргумент `precision` указывает точность (по умолчанию 0), а `method` - метод округления (по умолчанию `'common'`):

* `'common'`: округляет либо вверх, либо вниз.
* `'ceil'`: всегда округляет вверх.
* `'floor'`: всегда округляет вниз.

```
{{ 42.55|round }}
    -> 43.0
{{ 42.55|round(1, 'floor') }}
    -> 42.5
```

Обратите внимание, что даже при округлении до точности 0 возвращается число [`float`](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-float-veschestvennye-chisla/). Если необходим получить [целое число](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-int-tselye-chisla/), то пропустите его через [фильтр `int`](https://docs-python.ru/packages/modul-jinja2-python/vstroennye-filtry-modulja-jinja2/#filter.int):

```
{{ 42.55|round|int }}
    -> 43
```

_**`safe(value)`**_**:**

Фильтр `safe()` отмечает значение `value` как безопасное. Это означает, что в \[среде `Environment`]\[jinja2.Environment] с включенным автоматическим экранированием переменная `value` не будет экранирована.

_**`select(*args, **kwargs)`**_**:**

Фильтр `select()` фильтрует последовательность объектов, применяя _тест_ к каждому объекту и выбирая только те объекты, которые прошли его успешно.

Если _тест_ не указан, то каждый объект будет оцениваться как логическое значение.

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

```
{{ numbers|select("odd") }}
{{ numbers|select("divisibleby", 3) }}
{{ numbers|select("lessthan", 42) }}
{{ strings|select("equalto", "mystring") }}
```

Работает подобно [выражению-генератора](https://docs-python.ru/tutorial/generatory-python/vyrazhenie-generator/), например:

```
(n for n in numbers if test_odd(n))
(n for n in numbers if test_divisibleby(n, 3))
```

_**`selectattr(*args, **kwargs)`**_**:**

Фильтр `selectattr()` фильтрует последовательность объектов, применяя _тест_ к указанному атрибуту каждого объекта и выбирая только те объекты, которые прошли его успешно.

Если _тест_ не указан, то значение атрибута будет оцениваться как логическое.

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

```
{{ users|selectattr("is_active") }}
{{ users|selectattr("email", "none") }}
```

Работает подобно [выражению-генератора](https://docs-python.ru/tutorial/generatory-python/vyrazhenie-generator/), например:

```
(u for user in users if user.is_active)
(u for user in users if test_none(user.email))
```

_**`slice(value, slices, fill_with=None)`**_**:**

Фильтр `slice()` делит последовательность на `slices` списков и возвращает список списков, содержащих эти элементы. Полезно, если нужно создать `<div>`, содержащий три тега `<ul>`, представляющих столбцы:

```
<div class="columnwrapper">
  {%- for column in items|slice(3) %}
    <ul class="column-{{ loop.index }}">
    {%- for item in column %}
      <li>{{ item }}</li>
    {%- endfor %}
    </ul>
  {%- endfor %}
</div>
```

Аргумент `fill_with` используется для заполнения отсутствующих значений на последней итерации.

_**`sort(value, reverse=False, case_sensitive=False, attribute=None)`**_**:**

Фильтр `sort()` сортирует итерацию с помощью функции Python \[`sorted()`]\[f-sorted].

```
{% for city in cities|sort %}
    ...
{% endfor %}
```

Аргументы фильтра `sort`:

* `reverse` – сортировка по убыванию.
* `case_sensitive` – при сортировке строк сортирует верхний и нижний регистр отдельно.
* `attribute` – при сортировке объектов или словарей используется атрибут или ключ для сортировки. Можно использовать точечную нотацию, например `"address.city"`. Может быть список атрибутов, таких как `"age,name"`.

Сортировка стабильна, она не изменяет относительный порядок элементов, которые сравниваются равными. Это делает возможным цепочку сортировки по различным атрибутам и порядку.

```
{% for user in users|sort(attribute="name")
    |sort(reverse=true, attribute="age") %}
    ...
{% endfor %}
```

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

```
{% for user users|sort(attribute="age,name") %}
    ...
{% endfor %}
```

Изменено в версии 2.11.0: Параметр атрибута может представлять собой разделенный запятыми список атрибутов, например `"age,name"`.

_**`string(object)`**_**:**

Фильтр `string()` преобразует строку в unicode, если она еще не преобразована. Таким образом, строка разметки не преобразуется обратно в unicode.

_**`striptags(value)`**_**:**

Фильтр `striptags()` удаляет теги SGML/XML и замените соседние пробелы одним пробелом.

_**`sum(iterable, attribute=None, start=0)`**_**:**

Фильтр `sum()` возвращает сумму последовательности чисел плюс значение аргумента `start` (по умолчанию 0). Когда последовательность пуста, возвращается значение `start`.

Также можно суммировать только определенные атрибуты:

```
Total: {{ items|sum(attribute='price') }}
```

_**`title(s)`**_**:**

Фильтр `title()` возвращает версию строки, в которой все слова начинаются с прописных букв, все остальные символы будут строчными.

_**`tojson(value, indent=None)`**_**:**

Фильтр `tojson()` преобразует структуру в JSON, чтобы ее можно было безопасно использовать в тегах `<script>`. Фильтр возвращает строку JSON. Обратите внимание, что это доступно в шаблонах через фильтр `| tojson`, который также пометит результат как безопасный. Благодаря тому, как этот фильтр экранирует определенные символы, результат безопасен, даже если используется вне тегов `<script>`.

Следующие символы экранируются в строках: `<`, `>,`&`,`'\`. Это делает безопасным встраивание таких строк в любое место HTML, за исключением атрибутов, заключенных в двойные кавычки. В этом случае одиночные кавычки для атрибутов или HTML дополнительно экранируют его.

Аргумент `indent` можно использовать для включения красивой печати и устанавливает количество пробелов, для отступов структуры.

Обратите внимание, что этот фильтр предназначен для использования только в контексте HTML.

_**`trim(value, chars=None)`**_**:**

Фильтр `trim()` удаляет начальные и конечные символы, по умолчанию - пробелы.

_**`truncate(s, length=255, killwords=False, end='...', leeway=None)`**_**:**

Фильтр `truncate()` возвращает усеченную копию строки `s`. Длина указывается в аргументе `length`, который по умолчанию равен 255. Если значение аргумента `killwords=True`, то фильтр будет обрезать текст по длине. В противном случае последнее слово будет отброшено. Если текст действительно был усечен, то к нему будет добавлено многоточие (`...`). Если нужен другой знак, вместо многоточия `...`, то можно указать его с помощью аргумента `end`. Строки, длина которых превышают допустимый предел `leeway`, усечены не будут.

```
{{ "foo bar baz qux"|truncate(9) }}
    -> "foo..."
{{ "foo bar baz qux"|truncate(9, True) }}
    -> "foo ba..."
{{ "foo bar baz qux"|truncate(11) }}
    -> "foo bar baz qux"
{{ "foo bar baz qux"|truncate(11, False, '...', 0) }}
    -> "foo bar..."
```

Свободное пространство `leeway` по умолчанию в новых версиях Jinja равно 5, а раньше было 0, но его можно перенастроить глобально.

_**`unique(value, case_sensitive=False, attribute=None)`**_**:**

Фильтр `unique()` возвращает список уникальных элементов из заданного итеративного объекта.

```
{{ ['foo', 'bar', 'foobar', 'FooBar']|unique|list }}
    -> ['foo', 'bar', 'foobar']
```

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

Аргументы фильтра `unique`:

* `case_sensitive` – рассматривает строки верхнего и нижнего регистра как разные.
* `attribute` – фильтрует объекты с уникальными значениями для этого атрибута.

_**`upper(s)`**_**:**

Фильтр `upper()` преобразует значение в верхний регистр.

_**`urlencode(value)`**_**:**

Фильтр `urlencode()` цитирует данные `value` для использования в URL или запросе с использованием UTF-8.

Фильтр представляет собой обертку для \[`urllib.parse.quote()`]\[urllib.parse.quote], если `value` это строка или \[`urllib.parse.urlencode()`]\[urllib.parse.urlencode] для [словаря](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-dict-slovar/) или последовательности.

Аргумент `value` – данные для цитирования. Строка будет заключена в кавычки напрямую. Словари `dict` или последовательности кортежей `(key, value)` будут объединены в строку запроса.

Если в строке встречаются косые черты, то `'/'` не заключается в кавычки. HTTP - серверы обрабатывают `'/'` и `'%2F'` в путях эквивалентно. Если нужны косые черты в кавычках, то дополнительно используйте фильтр `|replace("/", "%2F")`.

_**`urlize(value, trim_url_limit=None, nofollow=False, target=None, rel=None)`**_**:**

Фильтр `urlize()` преобразует URL-адреса в виде обычного текста в кликабельные ссылки.

Если вы передадите фильтру дополнительное целое число `trim_url_limit`, то он сократит URL-адрес до этого числа. Также существует аргумент `nofollow`, который добавляет `rel='nofollow'`:

```
{{ mytext|urlize(40, true) }}
    Ссылки сокращаются до 40 символов и определяются с помощью rel='nofollow'
```

Если указан `target`, то атрибут `target` будет добавлен в тег `<a>`:

```
{{ mytext|urlize(40, target='_blank') }}
```

_**`wordcount(s)`**_**:**

Фильтр `wordcount()` считает слова в этой строке.

_**`wordwrap(s, width=79, break_long_words=True, wrapstring=None, break_on_hyphens=True)`**_**:**

Фильтр `wordwrap()` форматирует строку до заданной ширины. Существующие символы новой строки  обрабатываются как абзацы, которые нужно переносить отдельно.

Аргументы фильтра `wordwrap`:

* `s` – Исходный текст для обертывания
* `width` – Максимальная длина для переноса строк.
* `break_long_words` – Если слово длиннее ширины, то оно будет разделено и часть перенесется на другую строку.
* `break_on_hyphens` – Если слово содержит дефис, оно может быть разделено на несколько строк.
* `wrapstring` – Строка для присоединения к каждой обернутой строке. По умолчанию \[`Environment.newline_sequence`]\[jinja2.Environment].

Изменено в версии 2.11: существующие символы новой строки обрабатываются как отдельные абзацы.

Изменено в версии 2.11: Добавлен параметр `break_on_hyphens`.

_**`xmlattr(d, autospace=True)`**_**:**

Фильтр `xmlattr()` создает строку атрибута SGML/XML на основе элементов словаря `dict`. Все значения, которые не равны ни `none`, ни `undefined`, автоматически экранируются:

```
<ul{{ {'class': 'my_list', 'missing': none,
        'id': 'list-%d'|format(variable)}|xmlattr }}>
...
</ul>
```

В результате получается что-то вроде этого:

```
<ul class="my_list" id="list-42">
...
</ul>
```

Как видно из примера, если фильтр что-то возвращает, то он автоматически добавляет пробел перед элементом, если только аргумент `autospace` не равен `False`.
