Он позволяет передавать в шаблон определенную вами переменную.
Пусть у нас есть модель статей Article. Каждая статья имеет категорию Category. Мы хотим, чтобы на каждой странице выводился список из категорий, представляющий собой меню. При клике на категорию мы переходим на страницу со списком статей данной категории.
1. Для использования контекстного процессора создадим в корне нашего проекта папку context_processors. В ней создадим пустой файл __init__.py, чтобы python знал, что эта папка является модулем. Также создадим файл main_menu.py, куда мы поместим наш контекстный процессор:
from django.core.context_processors import request def menu(request): return {"var" : "It is my var 1 from template context processor!", "var2" : "Second var"}Обратите внимание, что контекстный процессор должен возвращать словарь.
2. В настройках проекта settings.py добавим к стандартным контекстным процессорам наш контекстный процессор:
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", "context_processors.main_menu.menu", )
3. После этого в шаблонах можно будет обращаться к нашим переменным так: {{ var }}, {{ var2 }}.
4. Никто нам не мешает импортировать в контекстный процессор модель, достать нужные объекты и поместить их в переменную, которая будет доступна в шаблонах. Вот так будет выглядеть функция контекстного процессора для формирования меню.
from django.core.context_processors import request #Импортируем модель категорий from article.models import Category def menu(request): category_list = Category.objects.all() return {"category_list":category_list}
Комментариев нет:
Отправить комментарий