2016-07-09 2 views
1

私はアクセスを制限するユーザー認証を使用しているサイトを持っています。 私は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問題を解決しません。

+1

もしあなたが '' home.view.user.is_staff ''を返そうとすると、ホームビューにrender(request、 'inventory/home.html')を返します。 – kapilsdv

+0

私はそれを考えていましたが、私はすべてのビュー(私は約15を持っている)の状態ならばこれを避けようとしていました。私はテンプレート内の条件を継承することを望んでいた – user3601503

+0

** user **はinventory/header.htmlのコンテキストで渡されます。テンプレート内の 'if user.'ではなく' if request.user'を使用しないと ' if request.user.is_staff'となります。 – kapilsdv

答えて

0

は私が

{% extends "inventory/header.html" %} 

代わりの

{% include "inventory/header.html" %} 

Dohのを使用している必要がありますが判明します!

関連する問題