Programing

Django : 템플릿 내에서 세션 변수에 액세스하십니까?

crosscheck 2020. 7. 11. 10:05
반응형

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

참고URL : https://stackoverflow.com/questions/2551933/django-accessing-session-variables-from-within-a-template

반응형