Как я узнал о контекстных процессорах в 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