Главная » 2016 » Март » 19 » Как передать данные на все страницы сайта
21:30
Как передать данные на все страницы сайта

Во всех представлениях (шаблонах) нашего блога мы использовали разные переменные и чтоб отобразить шаблон мы передавали нужные переменные через функции views.py - явно. Этого можно избежать используя контекстные процессоры. Текст взят с блога автора: Артем Устимов © 2014

Django: контекстные процессоры или добавление контекстных данных на все страницы

Дата и время: 23 января 2015 г. 23:03 | Категория: Веб-разработка, Django

Часто бывают случаи, когда какой-либо динамический элемент должен присутствовать на всех страницах сайта. Например, это может быть опрос или меню. Для решения данной проблемы в Django существуют контекстные процессоры.

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

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

Допустим, нам необходимо добавить на все страницы сайта меню, которое можно редактировать из панели администратора. Ясно, что меню должно подгружаться динамически, т. к. в любой момент может быть изменено. Пусть в меню будут отображаться какие-либо категории. Опишем для этого следующий контекстный процессор, который можно разместить в любом файле в папке с нашим приложением (например, context_processors.py):

 

from store.models import Category

def category(request):
 return {"category_list": Category.objects.all()}

Как видно, контекстный процессор должен просто возвращать словарь с данными, которые необходимо добавить в контекст страниц. В данном случае - все категории.

Далее, необходимо указать наш контекстный процессор в settings.py. По умолчанию кортеж с контекстными процессорами не указан в настройках, не смотря на то, что работают некоторые стандартные из них. Чтобы не нарушить работу фреймворка, необходимо указать и их (прим. указаны контекстные процессоры для Django 1.7.2, для вашей версии уточняйте в документации):

TEMPLATE_CONTEXT_PROCESSORS = (
 'django.contrib.auth.context_processors.auth',
 'django.core.context_processors.debug',
 'django.core.context_processors.i18n',
 'django.core.context_processors.media',
 'django.core.context_processors.static',
 'django.core.context_processors.tz',
 'django.contrib.messages.context_processors.messages',
 # Наш контекстный процессор
 'store.context_processors.category',
)

На этом всё. Теперь из любого шаблона можно будет получить доступ к списку категорий через переменную {{ category_list }}.

Категория: веб - Django | Просмотров: 333 | Добавил: kuzma | Рейтинг: 0.0/0
Всего комментариев: 0
avatar

Программирование игр на Python

Django - создание сайтов с нуля

Javascript - просто используем готовые решения