2017-09-19 18 views
0

Trotz vieler Suchen habe ich keine Lösung für mein Problem gefunden: Inhalt für authentifizierten Benutzer wird nicht in der Ansicht angezeigt, die Benutzerliste anzeigt.user.is_authenticated in Benutzerliste

Meine app hat eine Ansicht, welche eine Liste von Benutzern angezeigt wird:

views.py

def UserListView(request): 
    user = User.objects.all().order_by('-date_joined') 
    return render(request, 'accounts/user_list.html', {"user": user}) 

Eine Basisvorlage mit diesem navbar:

base.html

<nav class="navbar"> 
    <ul> 
    {% if user.is_authenticated %} 
     <li><a class="nav-item" href={% url 'logout' %}>Logout</a></li> 
    {% else %} 
     <li><a class="nav-item" href={% url 'login' %}>Login</a></li> 
    {% endif %} 
    </ul> 
</nav> 

Auch wenn der Benutzer angemeldet ist, zeigt das Menü Login anstelle von Logout an. Ich vermute ein Problem des Kontextes? Jeder Rat ist willkommen :)

+0

Sie eine Liste der Benutzer auf den Kontext übergeben. Sie sollten über sie iterieren. – JClarke

Antwort

2

Ihre Variable user aus der Sicht kollidiert mit dem user aus dem Auth-Kontext-Prozessor. Da die Variable aus der Sicht ein Abfragesatz ist, hat sie kein is_authenicated-Attribut, daher wird {% if user.is_authenticated %} immer als False ausgewertet.

Da die Ansicht eine Liste mit mehreren Benutzern anzeigt, wäre es besser, sie in users umzubenennen.

def user_list_view(request): 
    users = User.objects.all().order_by('-date_joined') 
    return render(request, 'accounts/user_list.html', {"users": users}) 

Sie werden dann die Schleife in Ihrer accounts/user_list.html Vorlage ändern müssen, zum Beispiel:

{% for u in users %} 
    {{ u.username }} 
{% endfor %} 
+0

Danke Alasdair, das ist es :) –

Verwandte Themen