Domanda

Sto usando django-registrazione, e basta configurarlo.

{{user.is_authenticated }}

è vero, anche se sono andato già a / account / logout / e collegato l'utente fuori.

{{user.is_anonymous }} 

restituisce true anche. Secondo Django documenti, quei due dovrebbero essere differenti:

  

is_anonymous: sempre restituisce False. Questo è un modo di differenziare oggetti Utente e AnonymousUser. In generale, si dovrebbe preferisce usare is_authenticated () a questo metodo.

e

  

is_authenticated: sempre restituisce True. Questo è un modo per dire se l'utente è stato autenticato. Ciò non implica alcuna autorizzazione, e non verifica se l'utente è attivo -. Si indica solo che l'utente ha fornito un nome utente e una password validi

Sto usando le viste standard che vengono con Django-registrazione e non li hanno ancora toccato. Nel tempalate ho il seguente codice:

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

Dove sarebbe il problema? Io sarò davvero grato!

UPDATE: Ho notato che sulla home page, esso sia is_authenticated e ritorno id_anonymous Vero, mentre se vado a / account / login prima loging in, solo i rendimenti is_anonymous veri come dovrebbe essere. E inoltre, sulla home page, ho la seguente vista se questo aiuta:

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

UPDATE 2: stampare (request.user.is_authenticated ()) dà Falso. Poi, ho:

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

e nel modello, user.is_authenticated restituisce FALSE.

UPDATE 3: Se io uso render_to_response, invece di render_jinja, tutto è buono. ancora non si sa come risolvere questo problema però: (

È stato utile?

Soluzione

Sembra che si sta cercando di capire due cose contemporaneamente; qual è il modo corretto di utilizzare modelli di Jinja e che cosa è l'accordo con l'utente / AnonymousUser. Forse cercano di capire questi problemi uno alla volta.

Non ho esperienza con Jinja, ma si consiglia di controllare e assicurarsi che si sta assumendo differenze tra Jinja e Django modello di sintassi in considerazione. La differenza più grande che io conosca è che una chiamata di metodo richiede parentesi esplicito. Così le chiamate is_authenticated e is_anonymous nel parentesi esempio necessità.

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

Se questo non risolve il problema, provare a installare django-debug-barra degli strumenti e dare un'occhiata al contesto per il modello. Controllare e vedere se è user Nessuno o un oggetto (utente o AnonymousUser).

Si può anche leggere su AnonymousUser e vedere un esempio di controllo per un utente autenticato nella documentazione. In poche parole, per un oggetto AnonymousUser is_anonymous () restituisce sempre vero invece che False e is_authenticated () restituisce sempre false anziché True.

Altri suggerimenti

Smack sulla testa. Ho letto da qualche parte:

  

se user.is_authenticated:       .... # sempre vero, dal momento che è un metodo!

E così, invece di avere {{}} in user.is_authenticated modello, dovrebbe essere {{user.is_authenticated ()}}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top