Как я могу передать переменные в представление, используя процессор контекста?
Я использую контекстный процессор для передачи нескольких переменных во все мои шаблоны. Однако я также хотел бы использовать эти переменные в реальных представлениях, которые отображают соответствующие шаблоны. Должен ли я добавить их в объект сеанса объекта запроса или в сам объект запроса (если это вообще возможно)?
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
параметр, или, может быть, создать декоратор, который бы "внедрил" его в ваши представления для вас (что проще в вашем случае).