Фильтры в шаблонах Django представляют собой специальные функции, используемые для форматирования данных перед выводом их в шаблоне.Используются для выполнения различных операций над переменными в шаблоне, таких как форматирование строк, изменение регистра, обрезка текста и другие.
| (pipe), за которым следует название фильтра и его аргументы, если таковые имеются.
Аргументы для фильтров передаются напрямую после имени фильтра, разделённые двоеточием, без пробела!{{ variable|filter:arg }}Цепочки фильтров:
{{ variable|filter1|filter2 }}Django предоставляет ряд встроенных фильтров для решения общих задач форматирования данных.
Фильтры из лекции (описание из документации):
addcapfirstloweruppercutfirstlastlengthdefaultdivisiblebyjoinslugifyВ Django можно определять собственные пользовательские фильтры для выполнения специфических операций над данными.
Создание папки templatetags:
templatetags на том же уровне, что и models.py, views.py и т.д. Если он еще не существует, создайте его - не забудьте про файл __init__.py, чтобы каталог воспринимался как пакет Python.Создание Python-модуля:
templatetags создайте файл с расширением .py (например, custom_filters.py).
<aside>
📌 Сервер не перезапускается автоматически!
После добавления модуля templatetags вам нужно перезапустить сервер,
прежде чем вы сможете использовать теги или фильтры в шаблонах.
</aside>
Определение фильтра:
custom_filters определите функцию или несколько функций, которые будут являться вашими фильтрами.template из Django.template.Library().register.filterfrom django import template
register = template.Library()
# можно задать имя с помощью аргумента name
@register.filter(name='db2')
def divide_by_2(value):
try:
return int(value) // 2
except ValueError:
return 0
# или не указывать имя, тогда по умолчанию будет использовано имя функции
@register.filter
def add_string(value, arg):
return value + arg
Использование в шаблонах:
{% load custom_filters %}, где custom_filters - это имя файла без расширения....
{% load custom_filters %}
<h1>{{ title }}</h1>
<p>{{ number|db2 }}</p>
<p>{{ test|add_string:' for you' }}</p>
...


В некоторых случаях, возможно использовать фильтры в качестве функций в Python-коде, но это не является общепринятой практикой и может считаться неудачным дизайном. Вместо этого, лучше создавать функции, которые делают необходимые операции, и вызывать их там, где это необходимо.
Пример того, как можно использовать фильтры в качестве функций в Python:
from django.template.defaultfilters import slugify
def custom_function(value):
# Используем фильтр slugify
return slugify(value)
# Пример использования
result = custom_function("Some random text")
print(result) # Выведет: "some-random-text"
Хотя это может работать, это не рекомендуется, так как это нарушает принципы разделения ответственности и ухудшает читаемость кода.