2012-02-25 3 views
7

Django에서는 'admin'권한을 가진 사용자를 위해 추가 기능이있는 템플릿을 구현하는 가장 좋은 방법은 무엇입니까?Django - 다른 템플릿을 관리자에게 표시

완전히 다른보기 집합을 관리자 용으로 작성하거나 기존보기 및 '사용자가 관리자 인 경우'와 같은 템플리트에 통합해야하는지 확실하지 않습니다.

Django에서 이것을 수행하는 표준 방법이 있습니까?

답변

2

당신이 템플릿 컨텍스트에서 사용할 수있는 사용자가 있다면 당신은 할 수 있습니다 : 당신이 RequestContext을 사용하고 TEMPLATE_CONTEXT_PROCESSORS 설정이 기본값 인 django.contrib.auth.context_processors.auth을 포함 f를

{% if user.is_active and user.is_staff %} 
    Only the admin will see this code. For example include some admin template here: 
    {% include "foo/bar.html" %} 
{% endif %} 

사용자는 템플릿에서 사용할 수 있습니다. 참조 용으로 authentication data in templates을 참조하십시오.

6

이것은 당신이 활성 및 직원되지 관리자 인 경우에만 물건 표시됩니다 :

{% if request.user.is_active and request.user.is_staff %} 
    {% include "foo/bar.html" %} 
{% endif %} 

당신 싶어 당신이 할 필요가 만 만 관리자에 대한 표시하는 경우 : 약

{% if request.user.is_superuser %} 
    ADD your admin stuff there. 
{% endif %} 

차이점 이 필드들 here.

2

저는 뷰 레이어에서 많은 로직을 유지하는 옹호자입니다 (일반적으로 MVC 디자인 패턴에 대해 말합니다). 그렇다면 데코레이터를 사용하여 권한을 기반으로 사용자를 다른 뷰로 안내하는 것은 어떻습니까? 당신의 urls.py에서 관리자를위한 패턴 정의가 관리자에게

def redirect_if_not_admin(fn): 
def wrapper(request): 
    if request.user.is_staff(): 
     return fn(request) 
    #or user.is_superuser(), etc 
    else: 
     return HttpResponseRedirect('/Permission_Denied/') 
return wrapper 

그리고 당신의 관리보기에를하지 않으면

url(r'^admin/$', 'user.views.admin_index'), 
#do so for your other admin views, maybe more elegantly than this quick example 

그런 다음 밖으로 사용자를 걷어차 데코레이터를 정의를

@redirect_if_not_admin 
def index(request): 
##do your thing 

다른 두 개의 답변보다 코드가 잘못되어 잘못되었습니다. 보기에 혼란스러워하는 것은 개인적인 취향입니다.

관련 문제