Как передать переменные в представление с помощью процессора контекста?

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


person Hekje    schedule 04.03.2012    source источник


Ответы (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)
person Gareth Rees    schedule 04.03.2012
comment
Вы можете использовать direct_to_template вместо render_to_response. Он автоматически вызовет RequestContext. - person jobima; 28.07.2016

Разве вы не можете просто получить ссылку на обработчик контекста и вызвать его в своих представлениях? Из того, что я прочитал в документах, в процессоре контекста нет ничего особенного:

Процессор контекста имеет очень простой интерфейс: это просто функция Python, которая принимает один аргумент, объект HttpRequest, и возвращает словарь, который добавляется в контекст шаблона. Каждый процессор контекста должен возвращать словарь.

Пользовательские контекстные процессоры могут находиться где угодно в вашей кодовой базе. Все, о чем заботится Django, — это то, что ваши пользовательские контекстные процессоры указываются вашей настройкой TEMPLATE_CONTEXT_PROCESSORS.

Вы могли бы иметь доступ к каждому представлению в начале, передав ему параметр request, или, возможно, создать декоратор, который будет вводить его в ваши представления для вас (в зависимости от того, что проще в вашем случае).

person mgibsonbr    schedule 04.03.2012