На сайте есть блок ссылок, который отображается на страницах: категории, поста и главной. Все они передаются в шаблон в своём представлении. Это раздувает контекст представления лишними данными.
Было бы намного проще, если бы данные были доступны из всех шаблонов, где они задействованы, без раздувания контекста. Для этого в 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 и убедимся, что блоки ссылок остались на своих местах.
Таким нехитрым образом можно передавать во все шаблоны статические, не изменяемые от действий пользователя, данные.
Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
Комментариев пока нет.