Frage

Ich bin mit django-Registrierung, und setzen Sie ihn einfach auf.

{{user.is_authenticated }}

ist wahr, obwohl ich ging bereits auf / Konten / Logout / und protokolliert den Benutzer aus.

{{user.is_anonymous }} 

liefert auch wahr. Nach django docs, sollten diese beiden unterschiedlich sein:

  

is_anonymous: Immer gibt False zurück. Dies ist eine Möglichkeit, Benutzer und AnonymousUser Objekte zu unterscheiden. Im Allgemeinen sollten Sie is_authenticated () zu dieser Methode lieber mit.

und

  

is_authenticated: Immer gibt True zurück. Dies ist ein Weg, zu sagen, ob der Benutzer authentifiziert wurde. Dies hat keine Berechtigungen bedeuten, und prüft nicht, ob der Benutzer aktiv ist -. Es zeigt nur an, dass der Benutzer einen gültigen Benutzernamen und ein Passwort zur Verfügung gestellt hat

Ich verwende die Standardansichten, die mit django-Anmeldung kommen und haben sie noch nicht berührt. Im tempalate ich habe den folgenden Code:

{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
    is anonymous
{% endif $}
{% else %}
    gotta login
{% endif %}

Wo wäre das Problem? Ich werde wirklich dankbar!

UPDATE: Ich habe bemerkt, dass auf der Homepage, sie beide is_authenticated und id_anonymous return true, während, wenn ich zu / Konten gehen / login vor loging in nur is_anonymous gibt true zurück, wie es sein sollte. Und auch auf der Homepage, ich habe folgende Ansicht, wenn das hilft:

def home(request):
    return render_jinja(request, 'index.html', blah = 'ga')

UPDATE 2: drucken (request.user.is_authenticated ()) gibt Falsch. Dann habe ich:

return render_jinja(request, 'index.html', blah = 'ga')

und in der Vorlage, user.is_authenticated FALSCH.

UPDATE 3: Wenn ich render_to_response verwenden, statt render_jinja, alles ist gut. noch nicht wissen, wie dieses Problem zu beheben, obwohl: (

War es hilfreich?

Lösung

Es scheint, wie Sie herausfinden zwei Dinge auf einmal versuchen; Was ist der richtige Weg, um den Einsatz jinja Vorlagen und was ist der Deal mit User / AnonymousUser. Vielleicht eine Zeit versuchen, herauszufinden, diese Probleme einer an.

Ich habe keine Erfahrung mit jinja Sie können jedoch überprüfen wollen und stellen Sie sicher, dass Sie einnehmen Unterschiede zwischen jinja und django Template Syntax berücksichtigt. Der größte Unterschied, den ich kenne, ist, dass ein Methodenaufruf explizit Klammer erfordert. So die is_authenticated und is_anonymous Anrufe in Ihrem Beispiel müssen Klammern.

Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }} 

Wenn das nicht das Problem lösen, versuchen Sie die Installation von django-Debug-Toolbar und werfen Sie einen Blick auf den Kontext für die Vorlage. Überprüfen, ob user ist kein oder ein Objekt (Benutzer oder AnonymousUser).

Sie können auch lesen Sie auf AnonymousUser und sehen ein Beispiel für für einen authentifizierten Benutzer Überprüfung in der Dokumentation. Auf den Punkt gebracht, für eine AnonymousUser Objekt is_anonymous () gibt immer wahr statt Falsch und is_authenticated () immer statt True False zurückgibt.

Andere Tipps

Smack auf dem Kopf. Ich habe irgendwo gelesen:

  

wenn user.is_authenticated:       .... # immer wahr, da es ein Verfahren ist!

Und so, anstelle von {{user.is_authenticated}} in Vorlage, sollte es sein {{user.is_authenticated ()}}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top