Вам нужно добавить django.core.context_processors.request
в контекстные процессоры шаблонов . Затем вы можете получить к ним доступ следующим образом:
{{ request.session.name }}
Если вы используете пользовательские представления, убедитесь, что вы передаете экземпляр RequestContext. Пример, взятый из документации :
from django.shortcuts import render_to_response
from django.template import RequestContext
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Обновление 2013: судя по upvotes, я все еще получаю за этот ответ, люди все еще считают это полезным, более трех лет спустя он был изначально написан. Обратите внимание, однако, что хотя приведенный выше код обзора по-прежнему действителен, в настоящее время существует гораздо более простой способ сделать это. render()
- это функция, очень похожая на render_to_response()
, но она автоматически использует RequestContext
, без необходимости передавать ее явно:
from django.shortcuts import render
def some_view(request):
# ...
return render(request, 'my_template.html', my_data_dictionary)
request.session
- это словарь, как любой другой, поэтому вы просто используете обычный механизм шаблона для атрибутов и членов:
{{ request.session.name }}
Не забудьте передать запрос в контекст шаблона или еще лучше убедитесь, что вы используете RequestContext и включили процессор контекстного запроса. См. документацию .
простейшая реализация использует if loop:
{% if 'data' in request.session %}
Я использую Django 1.9 (март 2016 г.) и чтобы {{ request.session.name}}
работал, мои настройки имеют это ::
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
. Отличие от предыдущих ответов: 'django.core.context_processors.request'
стало 'django.template.context_processors.request'
django.template.context_processors.request
уже находился в файле настроек: D
– Thai Tran
24 September 2016 в 23:49
Сначала напечатайте request.session.keys()
, затем
request.session['_auth_user_id']
request.session['_auth_user_backend']
Вы получите эти две переменные сеанса.
В вашем файле settingsins.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
Ваше представление может выглядеть так.
from django.shortcuts import render_to_response, render
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
@login_required()
def index_admin(request):
return render_to_response('carteras/index_admin.html', {}, context_instance=RequestContext(request))
Может быть, уже слишком поздно. Если вы прямо установили TEMPLATE_CONTEXT_PROCESSORS
в settings.py
, вы потеряете все значения по умолчанию TEMPLATE_CONTEXT_PROCESSORS
. Вот что я делаю в своем settings.py
:
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as DEFAULT_TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)
Вы можете передать переменную request
в шаблон и использовать:
{{ request.session.name }}
Продолжение @Ludwik Trammer answer, Как добавить TEMPLATE_CONTEXT_PROCESSORS
Для django 1.6 в settings.py добавьте TEMPLATE_CONTEXT_PROCESSORS, ссылаясь на приведенный ниже код, а затем используйте {{ request.session.name }}
в файлах шаблонов.
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request")
Ссылка https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Pls обратите внимание, что вы должны использовать этот полный код в настройках. Использование только "django.core.context_processors.request"
приведет к переопределению настроек по умолчанию.
HttpResponse
вообще не касается шаблонов, поэтому вопрос не кажется релевантным ... – Ludwik Trammer 13 July 2014 в 13:36