문제

저는 사용자가 게시할 수 있어야 하는 소규모 회사의 소규모 인트라넷 사이트에서 작업하고 있습니다.나는 사람들이 자신의 이메일 주소를 입력하고 고유한 로그인 URL을 전송받아 향후 요청에 대해 항상 식별하는 쿠키를 설정하는 매우 간단한 인증 메커니즘을 상상했습니다.

내 템플릿 설정에는 base.html이 있고 다른 페이지에서는 이를 확장합니다.base.html에 로그인 또는 등록 버튼을 표시하고 싶지만 필요한 변수가 항상 컨텍스트의 일부인지 어떻게 확인할 수 있습니까?각 뷰는 원하는 대로 컨텍스트를 설정하고 전역 컨텍스트 인구는 없는 것 같습니다.각 컨텍스트 생성에 사용자를 포함하지 않고 이를 수행하는 방법이 있습니까?

아니면 컨텍스트를 올바르게 설정하려면 나만의 사용자 지정 바로가기를 만들어야 합니까?

도움이 되었습니까?

해결책

각 뷰에서 변수를 명시적으로 설정할 필요가 없다는 보다 일반적인 의미에서 직접 작성하는 방법을 살펴보고 싶은 것처럼 들립니다. 컨텍스트 프로세서.

문서에서:

컨텍스트 프로세서는 매우 간단한 인터페이스를 가지고 있습니다:이는 하나의 인수인 HttpRequest 객체를 취하고 템플릿 컨텍스트에 추가되는 사전을 반환하는 Python 함수일 뿐입니다.각 컨텍스트 프로세서는 사전을 반환해야 합니다.

다른 팁

있다 필요 없음 이미 가지고 있는 경우 사용자 개체에 대한 컨텍스트 프로세서를 작성하려면 "django.core.context_processors.auth" ~에 TEMPLATE_CONTEXT_PROCESSORS 그리고 당신이 사용하는 경우 RequestContext 당신의 견해에.

django 1.4 또는 최신 버전을 사용하는 경우 모듈이 다음으로 이동되었습니다. django.contrib.auth.context_processors.auth

@라이언:전처리기에 대한 문서가 약간 작습니다.

@스탈레:보기에서 템플릿을 호출할 때마다 컨텍스트에 사용자 추가, DRY

해결책은 전처리기를 사용하는 것입니다.

:설정에서 추가하세요

TEMPLATE_CONTEXT_PROCESSORS = (
    'myapp.processor_file_name.user',
)

:myapp/processor_file_name.py에 삽입

def user(request):
    if hasattr(request, 'user'):
        return {'user':request.user }
    return {}

이제부터 템플릿에서 사용자 개체 기능을 사용할 수 있습니다.

{{ user.get_full_name }}

힌트는 모든 답변에 있지만 초보자를 위해 "처음부터" 다시 한 번 설명합니다.

인증 데이터는 기본적으로 (거의) 템플릿에 있습니다. 약간의 트릭이 있습니다.

~에 views.py:

from django.template import RequestContext
...
def index(request):
    return render_to_response('index.html', 
                              {'var': 'value'},
                              context_instance=RequestContext(request))

~에 index.html:

...
Hi, {{ user.username }}
var: {{ value }}
... 

여기에서: https://docs.djangoproject.com/en/1.4/topics/auth/#authentication-data-in-templates

이 템플릿 컨텍스트 변수는 다음과 같은 경우에 사용할 수 없습니다. 요청컨텍스트 사용되지 않습니다.

@dave {{user.username}}을 사용하려면 템플릿에서 일반적인 맵/해시가 아닌 requestContext를 사용해야합니다. http://www.djangoproject.com/documentation/templates_python/#subclassing-context-requestcontext

그래서 템플릿 엔진이 확인하는 전역 변수가 없는 것 같아요.

그러나 RequestContext에는 문제를 해결하기 위해 조사할 수 있는 미리 채워진 클래스가 있습니다.감사해요.

인증을 연결할 수 있는 경우 Django 인증 체계 당신은 사용할 수 있습니다 request.user.

이건 그냥 전화하면 될 것 같아요 authenticate() 그리고 login() 귀하의 쿠키 내용을 기반으로 합니다.

편집하다:@Staale - 저는 항상 locals() 장난 내 상황에 맞게 내 모든 템플릿이 볼 수 있도록 request 그래서 request.user.그렇지 않다면 그렇게 간단하지 않을 것 같아요.

기본적으로 가능합니다. 다음 단계를 수행하여 설정에 'django.contrib.auth.context_processors.auth' 컨텍스트를 추가했는지 확인하세요.기본적으로 settings.py에 추가되므로 다음과 같습니다.

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.auth',)

그리고 다음과 같이 사용자 개체에 액세스할 수 있습니다.

{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

자세한 내용은 여기를 참조하세요. http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-data-in-templates

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top