Курс по 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-го уровня с
заглавной буквы. Это, как раз результат применения фильтра.
Существуют
похожие фильтры, переводящие все буквы в заглавные или, наоборот, в малые. Они
следующие:
и
Далее, фильтр 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 позволяют выделять
первый и последний элементы списка или кортежа. Например:
или
Следующий
довольно полезный фильтр join работает по
аналогии с известным строковым методом join() следующим
образом:
<p >{{menu|join:" | "}}</p>
Увидим в
браузере строку:
О сайте |
Добавить статью | Обратная связь | Войти
Фильтр length возвращает
длину коллекции. Это аналог функции len():
Есть довольно
интересный фильтр 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:
Получим тот же
самый эффект. То есть, у нас есть самый разный инструментарий и уже сам
программист решает, как им воспользоваться, чтобы создать грамотный код
разрабатываемого сайта.
Курс по Django: https://stepik.org/a/183363