21:30 Как передать данные на все страницы сайта |
Во всех представлениях (шаблонах) нашего блога мы использовали разные переменные и чтоб отобразить шаблон мы передавали нужные переменные через функции views.py - явно. Этого можно избежать используя контекстные процессоры. Текст взят с блога автора: Артем Устимов © 2014 Django: контекстные процессоры или добавление контекстных данных на все страницыДата и время: 23 января 2015 г. 23:03 | Категория: Веб-разработка, DjangoЧасто бывают случаи, когда какой-либо динамический элемент должен присутствовать на всех страницах сайта. Например, это может быть опрос или меню. Для решения данной проблемы в Django существуют контекстные процессоры. На первый взляд, поставленную задачу можно решить простым добавлением нужных данных в контекст каждого представления, но в то же время очевидно, что это долго и не практично. Не говоря уже о сложности поддержки данного решения. В данном случае на помощь приходят контекстные процессоры. По сути они делают то же самое, что указано выше, но описать добавляемые данные придётся всего в одном месте, а не в каждом представлении. Допустим, нам необходимо добавить на все страницы сайта меню, которое можно редактировать из панели администратора. Ясно, что меню должно подгружаться динамически, т. к. в любой момент может быть изменено. Пусть в меню будут отображаться какие-либо категории. Опишем для этого следующий контекстный процессор, который можно разместить в любом файле в папке с нашим приложением (например, context_processors.py):
Как видно, контекстный процессор должен просто возвращать словарь с данными, которые необходимо добавить в контекст страниц. В данном случае - все категории. Далее, необходимо указать наш контекстный процессор в settings.py. По умолчанию кортеж с контекстными процессорами не указан в настройках, не смотря на то, что работают некоторые стандартные из них. Чтобы не нарушить работу фреймворка, необходимо указать и их (прим. указаны контекстные процессоры для Django 1.7.2, для вашей версии уточняйте в документации):
На этом всё. Теперь из любого шаблона можно будет получить доступ к списку категорий через переменную {{ category_list }}. |
|
Всего комментариев: 0 | |