Django 26. Контекстные процессоры
В этом посте, я расскажу про способ передачи данных во все шаблоны через использование контекстных процессоров в Django.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 201532
Реклама
На сайте есть блок ссылок, который отображается на страницах: категории, поста и главной. Все они передаются в шаблон в своём представлении. Это раздувает контекст представления лишними данными.
Было бы намного проще, если бы данные были доступны из всех шаблонов, где они задействованы, без раздувания контекста. Для этого в Django есть контекстные процессоры
.
Контекстные процессоры - это функции, которые позволяют добавлять определенные данные в контекст каждого шаблона. Они используются, когда нужно сделать некоторые данные доступными на всех страницах сайта.
Создаём контекстный процессор.
В директории приложения создадим файл context_processors.py
.
Напишем простую функцию get_social_links
которая принимает только request
.
В теле функции напишем возврат словаря, наподобие того, который представляет собой контекст.
Ключом будет переменная, доступная в шаблоне, в моём случае это - social_links
, а значением получение всех объектов модели - models.SocialLinksModel.objects.all()
.
Код.
from blog import models
def get_social_links(request):
return {'social_links': models.SocialLinksModel.objects.all()}
Добавляем процессор в settings.py.
Для того чтобы наш контекстный процессор начал работу, перейдём в файл settings.py
и найдём переменную TEMPLATES
.
В этой переменной есть список context_processors
.
Сюда добавим нашу функцию:
'blog.context_processors.get_social_links',
Убираем лишнее из представлений.
Перейдём в файл views.py
и из всех представлений удалим передачу ссылок в шаблон.
Проверка работы.
Запустим Django и убедимся, что блоки ссылок остались на своих местах.
Таким нехитрым образом можно передавать во все шаблоны статические, не изменяемые от действий пользователя, данные.
Все статьи