私はアクセスを制限するユーザー認証を使用しているサイトを持っています。 私はdjango-allauth
を使ってソーシャルメディア認証を処理していますが、staff
アカウント(djangoの管理パネルで設定)へのアクセスを制限したいとします。ユーザー認証でDjangoテンプレートを使用する
メインのコンテンツを後で読み込んだヘッダ(ブートストラップ、ナビゲーションバーなど)、またはログインを要求するメッセージや、管理者の確認を求めるメッセージをテンプレートとして使用したいと考えています。
マイヘッダテンプレートファイル:inventory/header.html
<body>
{% load bootstrap3 %}
{% if user.is_authenticated %}
{% if user.is_staff%}
{% block main %}{% endblock %}
{% block scripts %}{% endblock %}
{% else %}
<h1>Please ask an administrator to activate your account</h1>
{% endif %}
{% else %}
<h1>Please login to see this page</h1>
{% endif %}
</body>
、ビューによって呼び出された別のテンプレート:inventory/home.html
{% include "inventory/header.html" %}
{% block main %}
This is the home page.
{% endblock %}
ビュー:
def home(request):
return render(request,'inventory/home.html')
私はかかわらず、ビューを呼び出すたびユーザがログインしているかスタッフであるかにかかわらず、main
ブロックが常に表示されます。その他のエラーメッセージは正しく表示されます。
is_authenticated/is_staff
をすべてのテンプレートに挿入しないようにしています。 login_required
ビューデコレータを使用することも考えましたが、それは私のis_staff
問題を解決しません。
もしあなたが '' home.view.user.is_staff ''を返そうとすると、ホームビューにrender(request、 'inventory/home.html')を返します。 – kapilsdv
私はそれを考えていましたが、私はすべてのビュー(私は約15を持っている)の状態ならばこれを避けようとしていました。私はテンプレート内の条件を継承することを望んでいた – user3601503
** user **はinventory/header.htmlのコンテキストで渡されます。テンプレート内の 'if user.'ではなく' if request.user'を使用しないと ' if request.user.is_staff'となります。 – kapilsdv