Стандартные шаблонные фильтры

Курс по Django: https://stepik.org/a/183363

Архив проекта: 11_sitewomen.zip

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

https://docs.djangoproject.com/en/4.2/ref/templates/builtins/

Это довольно распространенный и полезный инструмент при построении шаблонов. Давайте рассмотрим основные стандартные фильтры и посмотрим на их работу.

Воспользуемся сразу первым фильтром add из документации. Он позволяет прибавлять некоторое целочисленное значение к числовому параметру, например, так (в шаблоне index.html):

<p >{{float|add:"50"}}</p>

В результате вещественное значение float равное 28.56 будет преобразовано в целое число (с отбрасыванием дробной части) с прибавлением значения 50. Итоговое число 78 будет подставлено в шаблон.

То есть, для применения фильтра к тому или иному параметру, прописывается вертикальная черта, затем, имя фильтра и при необходимости, через двоеточие аргумент фильтра. Чаще всего аргумент записывается в кавычках. Это рекомендуемая практика, так как строка позволяет описывать как числа, так и более сложные данные.

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

Итак, следующий фильтр capfirst преобразует первый символ строки в заглавную букву. Он записывается без аргументов следующим образом:

<h1>{{title|capfirst}}</h1>

Соответственно, строку в title мы запишем с малой буквы. После обновления главной страницы увидим заголовок 1-го уровня с заглавной буквы. Это, как раз результат применения фильтра.

Существуют похожие фильтры, переводящие все буквы в заглавные или, наоборот, в малые. Они следующие:

<h1>{{title|upper}}</h1>

и

<h1>{{title|lower}}</h1>

Далее, фильтр cut позволяет удалять указанный строковый фрагмент из переменной в шаблоне. Например:

<h1>{{title|cut:" "}}</h1>

Удаляет все пробелы из строки title. Если требуется убрать разные символы, то фильтр cut можно повторить, записав его еще раз:

<h1>{{title|cut:" "|cut:"?"}}</h1>

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

Следующий довольно распространенный фильтр default позволяет для ложных выражений подставлять значение по умолчанию. Например:

<title>{{main_title|default:"Без заголовка"}}</title>

Мы увидим строку «Без заголовка», так как параметр main_title отсутствует. То же самое будет, если переданная строка окажется пустой:

    data = {
        'title': 'главная страница',
        'main_title': '',
        ...
    }

Но, при наличии в ней хотя бы одного символа, увидим значение параметра main_title:

    data = {
        'title': 'главная страница',
        'main_title': 'title',
        ...
    }

Следующий фильтр divisibleby позволяет проверять на делимость одного числа на другое. Он возвращает значение True или False в зависимости от результата. В частности с его помощью можно выбирать числа кратные 2, 3 и так далее. Довольно полезная операция. Например:

<p >{{float|divisibleby:"2"}}</p>

Выдаст True, так как целое число 28 кратно 2. А вот если вместо 2 прописать 3, то получим значение False.

Следующая пара фильтров first и last позволяют выделять первый и последний элементы списка или кортежа. Например:

<p >{{menu|first}}</p>

или

<p >{{menu|last}}</p>

Следующий довольно полезный фильтр join работает по аналогии с известным строковым методом join() следующим образом:

<p >{{menu|join:" | "}}</p>

Увидим в браузере строку:

О сайте | Добавить статью | Обратная связь | Войти

Фильтр length возвращает длину коллекции. Это аналог функции len():

<p >{{lst|length}}</p>

Есть довольно интересный фильтр slugify, который конвертирует строку в так называемый слаг – последовательность символов из малых латинских букв, цифр и дефиса. Слаги часто используют для формирования дружественных URL-адресов и об этом мы еще будем говорить. А здесь приведу лишь пример его использования:

<p >{{"The Main Page"|slugify}}</p>

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

Использование фильтров в программе

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

django.template.defaultfilters

И, например, последним фильтром slugify можно было бы воспользоваться следующим образом:

from django.template.defaultfilters import slugify

Затем, в словаре data вызвать эту функцию:

    data = {
        'title': 'главная страница',
        'main_title': 'title',
        'url': slugify("The main page"),
        ...
    }

А в шаблоне index.html вывести параметр url:

<p >{{url}}</p>

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

Курс по Django: https://stepik.org/a/183363

Видео по теме