2012-02-25 7 views
7

Djangoでは、「管理者」権限を持つユーザーに特別な機能を持つテンプレートを実装する最も良い方法は何ですか。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を参照してください。

{% 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 %} 

違いをこれは、あなたがアクティブとスタッフである場合にのみいない管理者のものが表示されます

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 

これは、間違っていない他の2つの回答より多くのコードです。ビューに混乱を招くのは個人的な好みです。

関連する問題