Я использую контекстный процессор для передачи нескольких переменных всем моим шаблонам. Однако я также хотел бы использовать эти переменные в реальных представлениях, которые отображают соответствующие шаблоны. Должен ли я добавлять их в объект сеанса объекта запроса или в сам объект запроса (если это вообще возможно)?
Как передать переменные в представление с помощью процессора контекста?
Ответы (2)
Используйте RequestContext
:
def my_view(request):
c = RequestContext(request)
# c['key'] gets the value for 'key' from your context processor.
return render_to_response('template.html', {}, context_instance = c)
Разве вы не можете просто получить ссылку на обработчик контекста и вызвать его в своих представлениях? Из того, что я прочитал в документах, в процессоре контекста нет ничего особенного:
Процессор контекста имеет очень простой интерфейс: это просто функция Python, которая принимает один аргумент, объект HttpRequest, и возвращает словарь, который добавляется в контекст шаблона. Каждый процессор контекста должен возвращать словарь.
Пользовательские контекстные процессоры могут находиться где угодно в вашей кодовой базе. Все, о чем заботится Django, — это то, что ваши пользовательские контекстные процессоры указываются вашей настройкой TEMPLATE_CONTEXT_PROCESSORS.
Вы могли бы иметь доступ к каждому представлению в начале, передав ему параметр request
, или, возможно, создать декоратор, который будет вводить его в ваши представления для вас (в зависимости от того, что проще в вашем случае).