Django : 템플릿 내에서 세션 변수에 액세스하십니까?
Django에서 세션 변수를 설정하면 다음과 같습니다.
request.session["name"] = "name"
템플릿 내에서 액세스 할 수있는 방법이 있습니까, 아니면보기 내에서 검색 한 다음 템플릿으로 전달해야합니까?
템플릿 내에서 액세스하고 싶은 약 10 개의 작은 세션 변수가 있기 때문에 묻고보기에서 템플릿으로 10 개를 모두 전달하면 약간 지저분해질 수 있습니다.
(HttpResponseRedirect이기 때문에 세션 변수를 사용해야하지만 데이터베이스에 변수를 저장하는 것은 과도합니다.)
따라서 템플릿 내에서 직접 세션 변수를 가져 오는 방법은 무엇입니까?
템플릿 컨텍스트 프로세서 에 추가 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 업데이트 : 이 답변에 대해 여전히 받고있는 공감대에 의해 사람들은 원래 작성된 후 3 년이 지난 후에도 여전히 도움이되는 것으로 나타났습니다. 그러나 위의 뷰 코드는 여전히 유효하지만 요즘에는 훨씬 간단한 방법이 있습니다. 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를 사용하고 요청 컨텍스트 프로세서를 활성화해야합니다. 설명서를 참조하십시오 .
Django 1.9 (2016 년 3 월)를 사용하고 있으며 {{ 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'
request
변수를 템플릿에 전달할 수 있으며 다음을 사용합니다.
{{ request.session.name }}
먼저 인쇄 request.session.keys()
한 후
request.session['_auth_user_id']
request.session['_auth_user_backend']
이 두 세션 변수를 얻게됩니다.
가장 간단한 구현은 if 루프를 사용하는 것입니다.
{% if 'data' in request.session %}
settins.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))
@Ludwik Trammer 답변 계속, TEMPLATE_CONTEXT_PROCESSORS 추가 방법
For django 1.6, in settings.py add TEMPLATE_CONTEXT_PROCESSORS referring the below code and then use {{ request.session.name }}
in template files.
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")
Reference https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Pls note that, you should use that complete code in settings. Using "django.core.context_processors.request"
alone will result in overriding the default settings.
Maybe a bit too late now. If you directly set TEMPLATE_CONTEXT_PROCESSORS
in settings.py
, you will lose all default TEMPLATE_CONTEXT_PROCESSORS
value. Here is what I do in my 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',
)
'Programing' 카테고리의 다른 글
두 날짜 사이의 시간 차이를 초 단위로 가져옵니다. (0) | 2020.07.11 |
---|---|
정수 리터럴을 (int)로 캐스팅 해야하는 이유는 무엇입니까? (0) | 2020.07.11 |
파이썬에서 경로가 크로스 플랫폼 방식으로 절대 경로인지 상대 경로인지 확인하는 방법은 무엇입니까? (0) | 2020.07.11 |
Content-Type 헤더에 관계없이 Python Flask에서 원시 POST 본문 가져 오기 (0) | 2020.07.11 |
Sublime Text와 같이 PyCharm에서 선택한 텍스트를 둘러싸는 방법 (0) | 2020.07.11 |