Ответ
Контекстный процессор (context processor) в Django — это функция, которая добавляет дополнительные данные в контекст всех шаблонов, обрабатываемых Django. Это позволяет избежать дублирования кода при передаче одних и тех же переменных в каждый шаблон вручную.
Зачем использовать? Контекстные процессоры идеально подходят для глобальных данных, которые должны быть доступны в любом шаблоне вашего проекта, например:
- Настройки сайта (название, URL)
- Информация о текущем пользователе (если не используется
auth
контекстный процессор по умолчанию) - Содержимое корзины покупок
- Глобальные навигационные элементы
Пример создания и регистрации:
-
Создайте файл
context_processors.py
в вашем приложении (например,myapp/context_processors.py
):# myapp/context_processors.py def site_info(request): """Добавляет глобальную информацию о сайте в контекст шаблонов.""" return { 'SITE_NAME': 'Мой Замечательный Сайт', 'SITE_URL': 'https://example.com', 'CURRENT_YEAR': 2023 # Пример динамического значения }
-
Зарегистрируйте процессор в
settings.py
в секцииTEMPLATES
:# settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', # Ваш кастомный контекстный процессор 'myapp.context_processors.site_info', ], }, }, ]
Использование в шаблоне:
После регистрации, переменные SITE_NAME
, SITE_URL
и CURRENT_YEAR
будут доступны в любом шаблоне:
<!-- base.html или любой другой шаблон -->
<footer>
<p>© {{ CURRENT_YEAR }} {{ SITE_NAME }}. Все права защищены.</p>
<p>Посетите нас: <a href="{{ SITE_URL }}">{{ SITE_URL }}</a></p>
</footer>
Важное замечание: Контекстные процессоры выполняются для каждого запроса. Избегайте добавления в них тяжеловесной логики или запросов к базе данных, которые могут замедлить работу вашего приложения.