Cat

Django 26. Контекстные процессоры

В этом посте, я расскажу про способ передачи данных во все шаблоны через использование контекстных процессоров в Django.

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Сайт на Django proDream 06 Сентябрь 2023 Просмотров: 586

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

Было бы намного проще, если бы данные были доступны из всех шаблонов, где они задействованы, без раздувания контекста. Для этого в 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 и убедимся, что блоки ссылок остались на своих местах.

Таким нехитрым образом можно передавать во все шаблоны статические, не изменяемые от действий пользователя, данные.

Автор

    Нет комментариев

    Реклама