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))