Фильтры шаблонов

Последнее обновление: 18.08.2022

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

add

Фильтр add добавляет к одному значению другое.

значение1 | add: значение2

Например:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Django on METANIT.COM</title>
</head>
<body>
    <div>
{% with message="Hello" %}
	<h2>{{ message|add:" Django" }}</h2>
{% endwith %}
    </div>
</body>
</html>

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

Фильтр add в шаблонах Django

capfirst

Фильтр capfirst делает первую букву заглавной:

{{ message|capfirst }}

Например, если message равно "django", то послет применения фильтра на веб-странице будет выведено "Django".

cut

Фильтр cut удаляет из строки определенную подстроку:

{% with message="Я был дома" %}
	{{ message|cut:"был" }}
{% endwith %}

В данном случае из строки "Я был дома" удаляется подстрока "был", поэтому шаблон выведет "Я дома"

Проверка значения и значение по умолчанию

Фильтр default проверяет значение, и если оно равно False, то возвращает некоторое значение по умолчанию.

{% with isEnabled=False %}
	{{ isEnabled|default:"unabled" }}
{% endwith %}

В данном случае переменная isEnabled равна False, поэтому шаблон выведет "unabled"

При этом сама переменная необязательно должна хранить именно True или False, это может быть любое выражение, которое можно привести в значению True/False. Например:

{% with name="" %}
	{{ name|default:"Undefined" }}
{% endwith %}

В данном случае переменная name представляет пустую строку, поэтому при применении фильтра получим False, а фильтр возвратит строку "Undefined".

Похожим действием обладает фильтр default_if_none - он возвращает значение по умолчанию, если переданное ему значение равно None:

{% with user=None %}
	{{ user|default_if_none:"Undefined" }}
{% endwith %}

floatformat

floatformat форматирует числа с плавающей точкой.

Если фильтру не передается аргумент, то число округляется до одного знака после запятой:

Значение

Шаблон

Результат

34.23234

{{ value|floatformat }}

34.2

34.00000

{{ value|floatformat }}

34

34.26000

{{ value|floatformat }}

34.3

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

Значение

Шаблон

Результат

34.23234

{{ value|floatformat:3 }}

34.232

34.00000

{{ value|floatformat:3 }}

34.000

34.26000

{{ value|floatformat:3 }}

34.260

Если аргумент - отрицательное число, то число также округляется до определенного количества знака после запятой. Однако если дробная часть состоит из одних нулей, то нули при этом отсекуются:

Значение

Шаблон

Результат

34.23234

{{ value|floatformat:"-3" }}

34.232

34.00000

{{ value|floatformat:"-3" }}

34

34.26000

{{ value|floatformat:"-3" }}

34.260

Аргумент 0 позволяет округлить число до ближайщего целого:

Значение

Шаблон

Результат

34.23234

{{ value|floatformat:"0" }}

34

34.00000

{{ value|floatformat:"0" }}

34

39.56000

{{ value|floatformat:"0" }}

40

Если аргумент имеет суффикс g, то применяется группировка с использованием разделителя разрядов в соответствии с текущей локалью:

Значение

Шаблон

Результат

34232.34

{{ value|floatformat:"2g" }}

34,232.34

34232.06

{{ value|floatformat:"g" }}

34,232.1

34232.00

{{ value|floatformat:"-3g" }}

34,232

При выводе применяется текущая локаль проекта. Например, если мы откроем файл settings.py, то можем там найти переменную LANGUAGE_CODE, которая определяет локаль:

LANGUAGE_CODE = 'en-us'

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

LANGUAGE_CODE = 'ru-ru'

Теперь для кода

{% with value=34232.34 %}
	{{ value|floatformat:"2g" }}
{% endwith %}

Тмы получим вывод

34 232,34

Если же необходимо отключить локализацию, аргументу добавляется суффикс u:

{{ value|floatformat:"2u" }}

Форматирование дат

Фильтр date применяется к объекту datetime и в качестве аргумента получает следующие спецификаторы даты и времени:

  • d: день месяца в виде двух цифр (одна цифра дополняется нулем слева). Диапазон значений от '01' до '31'

  • j: день месяца без дополнения нулем. Диапазон значений от '1' до '31'

  • D: день недели в текстовом виде в виде трех символов, например, 'Fri'

  • l: день недели в полном виде, например, 'Friday'

  • S: возвращает английский суффикс для порядковых числительных для дня месяца. Возможные значения: 'st', 'nd', 'rd' и 'th'

  • w: номер деня недели. Значения в диапазоне от'0' (воскресенье) до '6' (суббота)

  • z: номер дня года. Диапазон значений от 1 до 366

  • W: номер недели года (первым днем недели считается понедельник). Значения от 1 до 53

  • m: номер месяца в виде двух цифр. Диапазон значений от '01' до '12'

  • n: номер месяца в виде двух цифр без предварения нулем. Диапазон значений от '1' до '12'

  • M: текстовое значение месяца в виде трех символов. Например, 'Jan'

  • b: текстовое значение месяца в виде трех символов в нижнем регистре. Например, 'jan'

  • E: локализованное название месяца. Например, 'августа' ("август" в родительном падеже)

  • F: полное название месяца. Например, 'January'

  • N: аббревиатура месяца. Например, 'Jan.', 'Feb.', 'March', 'May'

  • t: число дней в текущем месяце. Значения от 28 до 31

  • y: двухчисловой код года с дополнением нулем. Диапазон значений от '00' до '99'

  • Y: четырехчисловой код года с дополнением нулем. Диапазон значений от '0001' до '9999'

  • L: является ли год високосным. Значения: True(является) и False (не является)

  • o: ISO-8601 week-numbering year,

  • g: час в 12-часовом формате без дополнения нулем. Диапазон значений от '1' до '12'

  • G: час в 24-часовом формате без дополнения нулем. Диапазон значений от '0' до '23'

  • h: час в 12-часовом формате с дополнением нулем. Диапазон значений от'01' до '12'

  • H: час в 24-часовом формате с дополнением нулем. Диапазон значений от'00' до '23'

  • i: минуты от '00' до '59'

  • s: секунды от '00' до '59'

  • u: микросекунды от 000000 до 999999

  • a: 'a.m.' или 'p.m.'

  • A: 'AM' или 'PM'

  • f: время в 12-часовом формате с минутами. Например, '1:30'

  • P: время в 12-часовом формате с минутами и "a.m."/"p.m.". Например, '12:30 p.m.'

  • e: часовая зона, например, '', 'GMT', '-500', 'US/Eastern', etc.

  • O: смещение в часах относительно гринвича. Например, '+0200'

  • T: временная зона текущего компьютера. 'EST', 'MDT'

  • c: дата и время в формате ISO 8601. Например, 2008-01-02T10:30:00.000123+02:00 или 2008-01-02T10:30:00.000123

  • r: дата и время в формает RFC 5322

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

  • DATE_FORMAT

  • DATETIME_FORMAT

  • SHORT_DATE_FORMAT

  • SHORT_DATETIME_FORMAT

Например, в представлении в шаблон передается некоторая дата:

from datetime import datetime 
from django.shortcuts import render
 
def index(request):
    return render(request, "index.html", context={"my_date": datetime.now()})

Выведем эту дату в шаблоне:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Django on METANIT.COM</title>
</head>
<body>
    <div>
<h2>{{ my_date|date:"d.m.Y" }}</h2>
<h2>{{ my_date|date:"H:i" }}</h2>
<h2>{{ my_date|date:"c" }}</h2>
<h2>{{ my_date|date:"SHORT_DATE_FORMAT" }}</h2>
</body>
</html>
фильтр date и форматирование времени и дат в шаблонах Django

Операции со списками

Ряд фильтров предназначены для работы со списками.

Фильтр join объединяет элементы списка, используя определенный разделитель:

{{ users|join:", "}}

Предположим, что здесь users - это список ["Tom", "Sam", "Bob", "Mike"], то после применения фильтра получится строка "Tom, Sam, Bob, Mike".

Фильтр slice получает часть списка. Для извлечения часть списка он получает начальный и конечный индексы для извлечения элементов:

slice:"start:"
slice:":end"
slice:"start:end"

параметр start указывает на индекс элемента, начиная с которого надо скопировать элементы, а через параметр end передается индекс элемента, до которого нужно копировать список. Если start или end не указываются, то start по умолчанию равен 0, а end - на длину списка. Например

{{ {{ users|slice:"1:3" }}}}

Здесб извлекаются элементы с 1 по 3 индекс (не включая), то есть получится список ["Sam", "Bob"].

Фильтр length возвращает длину списка (также этот фильтр можно применять для нахождения длины строки).

{{ users|length}}

Здесь фильтр возвратит 4.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850