2016-07-09 7 views
1

Ich habe eine Website, die ich benutze Authentifizierung verwenden, um den Zugriff auf beschränken. Ich benutze django-allauth, um Social-Media-Authentifizierung zu behandeln, aber den Zugriff auf staff Konten nur beschränken (im Django-Admin-Panel festgelegt).Verwenden von Django-Vorlagen mit Benutzerauthentifizierung

Ich möchte eine Vorlage als Header (Bootstrap, Navigationsleiste usw.) verwenden, wobei der Hauptinhalt anschließend geladen wird, oder eine Nachricht, die den Benutzer auffordert, sich anzumelden oder eine Bestätigung durch Admins anzufordern.

Meine Header-Template-Datei: 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> 

Und ein anderer durch die Ansicht namens Vorlage: inventory/home.html

{% include "inventory/header.html" %} 
{% block main %} 
    This is the home page. 
{% endblock %} 

Aussicht:

def home(request): 
    return render(request,'inventory/home.html') 

Jedes Mal, wenn ich die Ansicht aufrufen, und zwar unabhängig ob der Benutzer eingeloggt ist oder ein Mitarbeiter, der main Block wird immer angezeigt. Die anderen Fehlermeldungen werden korrekt angezeigt.

Ich versuche zu vermeiden, is_authenticated/is_staff in alle meine Vorlagen einzufügen. Ich habe auch über die Verwendung der login_required View Decorator gedacht, aber das löst nicht meine is_staff Problem.

+1

Sie könnten 'if request.user.is_staff: return render (Anfrage, 'inventory/home.html') else: return render (Anfrage, 'show_something_relevant.html')' in der Home-Ansicht. – kapilsdv

+0

Ich habe darüber nachgedacht, aber ich habe versucht, dies zu vermeiden, wenn Bedingung in jeder Ansicht (ich habe um 15). Ich hatte gehofft, ich könnte die Bedingung innerhalb der Vorlagen erben – user3601503

+0

wird ** Benutzer ** im Kontext von Inventar/header.html übergeben. Wenn nicht 'if request.user' statt' if user' in der Vorlage, wie ' if request.user.is_staff'. – kapilsdv

Antwort

0

Stellt sich heraus, die ich verwendet habe sollte

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

statt

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

Doh!