Как передать контекст в шаблон, не указав его во всех представлениях? - PullRequest
4 голосов
/ 13 марта 2011

У меня есть несколько представлений, и все они работают хорошо, и все используют шаблоны, которые расширяют один базовый шаблон, который выводит основной HTML, верхний колонтитул, нижний колонтитул, навигацию и так далее. Счастливая семья.

Теперь я хочу поиграть с сеансами на страницах, и поскольку вы не можете получить доступ к информации о сеансе пользователя из шаблона, фактически не передавая ее из представления (поправьте меня, где я ошибаюсь), у меня есть два варианта:

  1. добавить данные сеанса к остальным битам, которые я передаю в качестве контекста шаблонам HTML в представлениях (не уверен, что это хороший путь)

  2. каким-то образом наследовать все существующие представления от представления, которое всегда будет подталкивать контекст к обрабатываемым шаблонам - таким образом, мне не нужно беспокоиться ни о чем другом, что я, возможно, захочу добавить на свои страницы в будущем - это возможно?

Я очень новичок в django, и может быть другой правильный способ сделать это - все ваши предложения очень ценятся.

1 Ответ

7 голосов
/ 13 марта 2011

Я думаю, что добавить контекстный процессор - очень простой способ сделать это.

Вы можете написать свой собственный или использовать этот: DJANGO.CORE.CONTEXT_PROCESSORS.REQUEST

http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request

Тогда у вас будет запрос в вашем шаблоне, и вы сможете перейти к сеансу с request.session

Если вы сделаете это, убедитесь, что вы передали RequestContext вместе с вашимпредставления к шаблонам, что-то вроде этого:

from django.template import RequestContext
def some_view(request):
    # ...
    return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

Также измените файл settings.py, добавив в контекстный процессор

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    "django.core.context_processors.request",
)
...