Фильтры в шаблонах Django представляют собой специальные функции, используемые для форматирования данных перед выводом их в шаблоне.Используются для выполнения различных операций над переменными в шаблоне, таких как форматирование строк, изменение регистра, обрезка текста и другие.

Синтаксис

Цепочки фильтров:

Встроенные фильтры

Создание пользовательских фильтров

В Django можно определять собственные пользовательские фильтры для выполнения специфических операций над данными.

  1. Создание папки templatetags:

  2. Создание Python-модуля:

    Untitled

    <aside> 📌 Сервер не перезапускается автоматически! После добавления модуля templatetags вам нужно перезапустить сервер, прежде чем вы сможете использовать теги или фильтры в шаблонах.

    </aside>

  3. Определение фильтра:

    from 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
    
  4. Использование в шаблонах:

    ...
    {% load custom_filters %}
    <h1>{{ title }}</h1>
    <p>{{ number|db2 }}</p>
    <p>{{ test|add_string:' for you' }}</p>
    ...
    

    Untitled

    Untitled

Использование фильтров в качестве функций в коде

В некоторых случаях, возможно использовать фильтры в качестве функций в 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"

Хотя это может работать, это не рекомендуется, так как это нарушает принципы разделения ответственности и ухудшает читаемость кода.