Фильтры применяются через | к переменным в шаблоне.
Строки
{{ name|lower }} <!-- dmitrii -->
{{ name|upper }} <!-- DMITRII -->
{{ name|title }} <!-- Dmitrii Masliaev -->
{{ name|capfirst }} <!-- Dmitrii -->
{{ text|truncatewords:10 }} <!-- первые 10 слов... -->
{{ text|truncatechars:50 }} <!-- первые 50 символов... -->
{{ text|wordcount }} <!-- количество слов -->
{{ html|striptags }} <!-- убрать HTML теги -->
{{ text|linebreaks }} <!-- \n → <p> -->
{{ text|linebreaksbr }} <!-- \n → <br> -->
Числа
{{ price|floatformat:2 }} <!-- 1234.56 -->
{{ count|pluralize }} <!-- "s" или "" -->
{{ count|pluralize:"ий,ия,ий" }} <!-- склонение -->
{{ number|filesizeformat }} <!-- 1.2 MB -->
Даты
{{ date|date:"d.m.Y" }} <!-- 15.01.2024 -->
{{ date|date:"d M Y" }} <!-- 15 Jan 2024 -->
{{ date|time:"H:i" }} <!-- 10:30 -->
{{ date|timesince }} <!-- 3 дня назад -->
{{ date|timeuntil }} <!-- через 2 дня -->
Списки и словари
{{ items|length }} <!-- количество элементов -->
{{ items|first }} <!-- первый -->
{{ items|last }} <!-- последний -->
{{ items|join:", " }} <!-- через запятую -->
{{ items|slice:":3" }} <!-- первые 3 -->
{{ items|dictsort:"name" }} <!-- сортировка по полю -->
Логика и отображение
{{ value|default:"не указано" }} <!-- если False/None/пусто -->
{{ value|default_if_none:"N/A" }} <!-- только если None -->
{{ value|yesno:"да,нет,не знаю" }} <!-- True/False/None -->
Безопасность
{{ html|safe }} <!-- не экранировать HTML -->
{{ text|escape }} <!-- экранировать (по умолчанию) -->
{{ text|urlize }} <!-- URL в ссылки -->
Кастомный фильтр
# templatetags/my_filters.py
from django import template
register = template.Library()
@register.filter
def priority_label(value):
labels = {1: 'Низкий', 2: 'Средний', 3: 'Высокий'}
return labels.get(value, value)
{% load my_filters %}
{{ task.priority|priority_label }}
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!