Djangoでは、「管理者」権限を持つユーザーに特別な機能を持つテンプレートを実装する最も良い方法は何ですか。Django - 異なるテンプレートを管理者に表示
管理者専用の完全に異なるビューのセットを作成するか、既存のビューと「ユーザーが管理者の場合」のようなテンプレートに統合する必要があるかどうかはわかりません。
Djangoでこれを行うための標準的な方法はありますか?
Djangoでは、「管理者」権限を持つユーザーに特別な機能を持つテンプレートを実装する最も良い方法は何ですか。Django - 異なるテンプレートを管理者に表示
管理者専用の完全に異なるビューのセットを作成するか、既存のビューと「ユーザーが管理者の場合」のようなテンプレートに統合する必要があるかどうかはわかりません。
Djangoでこれを行うための標準的な方法はありますか?
テンプレートのコンテキストで使用可能なユーザーを持っている場合あなたが行うことができます:あなたは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 %}
違いをこれは、あなたがアクティブとスタッフである場合にのみいない管理者のものが表示されます
これらのフィールドはhereです。
私は、ビューレイヤーから多くのロジックを取り除くことを主張しています(一般的に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つの回答より多くのコードです。ビューに混乱を招くのは個人的な好みです。