Если я установлю переменную сеанса в Django, например:
request.session["name"] = "name"
Есть ли способ получить к нему доступ из шаблона, или мне нужно получить его из представления, а затем передать его в шаблон?
Спрашиваю, потому что у меня есть около 10 небольших переменных сеанса, к которым я хотел бы получить доступ в шаблоне, и передача всех 10 из представления в шаблон может стать немного беспорядочным.
(Мне нужно использовать переменные сеанса, потому что это HttpResponseRedirect, но хранение переменных в базе данных является излишним для моих целей.)
Итак - какой способ получить переменные сеанса прямо в шаблоне?
HttpResponse
Класс не имеет дело с шаблонами на всех, так что вопрос не представляется актуальной ...request.session
- это такой же словарь, как и любой другой, поэтому вы просто используете обычный механизм шаблонов для атрибутов и членов:Не забудьте передать запрос в контекст шаблона или, что еще лучше, убедитесь, что вы используете RequestContext и у вас включен обработчик контекста запроса. Смотрите документацию .
источник
Я использую Django 1.9 (март 2016 г.), и чтобы приступить
{{ request.session.name}}
к работе, в моих настройках указано следующее:Отличие от предыдущих ответов:
'django.core.context_processors.request'
стало'django.template.context_processors.request'
источник
django.template.context_processors.request
он уже был в файле настроек: DВы можете передать
request
переменную в шаблон и использовать:источник
Сначала распечатайте,
request.session.keys()
затемВы получите эти две переменные сеанса.
источник
простейшая реализация - использование цикла if:
источник
В вашем файле setins.py
Ваш взгляд может выглядеть так.
источник
Продолжая ответ @Ludwik Trammer, как добавить TEMPLATE_CONTEXT_PROCESSORS
Для django 1.6 в settings.py добавьте TEMPLATE_CONTEXT_PROCESSORS, ссылаясь на приведенный ниже код, а затем используйте
{{ request.session.name }}
в файлах шаблонов.Ссылка https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Пожалуйста, обратите внимание, что вы должны использовать этот полный код в настройках. Использование
"django.core.context_processors.request"
одного приведет к отмене настроек по умолчанию.источник
Может быть, уже слишком поздно. Если вы сразу установить
TEMPLATE_CONTEXT_PROCESSORS
вsettings.py
, вы потеряете все по умолчаниюTEMPLATE_CONTEXT_PROCESSORS
значения. Вот что я делаю в своемsettings.py
:источник