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

Из view-функции в шаблон в словаре context передаются данные, которые необходимо встроить в HTML-страницу. При необходимости эти данные можно обработать прямо в шаблоне. Для этого есть фильтры: они обрабатывают значения переменных или аргументов других тегов.

Фильтр length

Фильтр length вернёт длину строки или последовательности, переданной в переменной variable. В коде фильтры присоединяются к имени переменной через символ |:

{{ variable|length }} 

Если в переменную variable передать слово «python», то в шаблон будет выведено число 6, по числу букв в слове.

Фильтр safe

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

# views.py
...


def poem(request):
    text = ('Вчера Крокодил<br>улыбнулся так злобно,<br>Что мне до сих '
            'пор<br>за него неудобно.<br><i>Рената Муха</i>'
            )
    context = {'text': text}
    render(request, 'poem.html', context) 
<!-- poem.html --> 
<h2>Стихотворение</h2>
{{ text }} 

Пользователю вернётся такая страница:

Чтобы HTML-теги не вываливались на страницу, а выполняли своё предназначение (форматировали и структурировали страницу), в шаблоне необходимо применять фильтр safe:

<h2>Стихотворение</h2>
{{ text|safe }} 

И страница будет выглядеть так:

Фильтр linebreaksbr

При работе в текстовом редакторе начало новой строки обычно обозначают нажатием Enter/Return, но HTML игнорирует такой перенос строк: текст будет будет выведен на HTML-страницу одной строкой. Перенос строк в HTML обозначается тегом <br>.В Django Templates есть фильтр linebreaksbr. Он заменяет символы перевода строки \n на HTML-теги <br>.

Фильтр date

Фильтр date работает только с объектами типа date и datetime: он форматирует дату по маске. За основу взят стандарт, принятый в языке программирования PHP.Если вывести дату без форматирования, то получится что-то вроде '2019-02-02 00:00:00+00:00'. Это не лучший вариант: длинно, некрасиво и много лишней информации. Фильтр date позволяет вывести дату в любой форме:

{{ pub_date|date:"j.m.Y" }} {# выведет 2.02.2020 #} 
{{ pub_date|date:"j F Y" }} {# выведет 2 Февраля 2020 #}
{{ pub_date|date:"d.m.y" }} {# выведет 02.02.20 #}
{{ pub_date|date:"d M Y" }} {# выведет 02 Фев 2020 #}
{{ post.pub_date|date:"d E Y" }} {# выведет 2 февраля 2020 #} 

Несколько фильтров сразу

Фильтры можно объединять в цепочку:

{{ variable|title|truncatewords:4 }} 

Если переменная variable содержит строку ЭТО ОДиН маЛЕНЬкий шаг для чеЛОВека и оГрОмНыЙ СКачОК для челоВЕЧЕсТВАа, то:

  • сначала фильтр title преобразует регистр букв в формат «каждое слово с заглавной» (Это Один Маленький Шаг Для Человека И Огромный Скачок Для Человечества),
  • а потом фильтр truncatewords:4 обрежет текст до первых четырёх слов.

В результате на страницу будет выведено Это Один Маленький Шаг. В Django есть ещё множество встроенных фильтров, почитайте о них в документации, это обязательно пригодится. В Django есть много встроенных тегов, но их можно создать и самостоятельно.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: