Как я узнал о контекстных процессорах в Django

Я создаю интернет-магазин аксессуаров на Django.

Я сделал навигационную панель (navbar) для отображения категорий товаров. Сначала я прописал категории вручную (hard-coded). Какое-то время это работало.

Затем я столкнулся с проблемой. Если я добавляю новую категорию, мне приходится обновлять навигационную панель вручную. Это неэффективно.

Моей первой мыслью было передавать категории через context в моем view. Вскоре я заметил вторую проблему. Навигационная панель нужна на каждой странице. Это значит, что мне пришлось бы повторять один и тот же код в каждом view. Это приводит к запутанному коду.

Я нашел способ лучше: Django Context Processors.

Контекстные процессоры делают данные доступными для всех шаблонов. Вам не нужно передавать данные из каждого view.

Используйте контекстные процессоры для:

Контекстный процессор — это функция на Python. Она принимает объект request и возвращает словарь.

Пример:

def custom_context(request):
    return {
        "custom_value": "привет из контекстных процессоров"
    }

Вы должны зарегистрировать функцию в настройках. Добавьте её в список context_processors внутри настройки TEMPLATES.

Пример:

'OPTIONS': {
    'context_processors': [
        'myapp.context_processors.custom_context',
    ],
},

Теперь вы можете использовать данные в шаблонах следующим образом:

{{ custom_value }}

Это решило мою проблему. Теперь моя навигационная панель автоматически получает данные о категориях на каждой странице. Мне больше не нужно дублировать код.

Создание новых функций часто обучает новым концепциям. Для меня такой концепцией стали контекстные процессоры.

Источник: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h