Pregunta

Estoy usando Django-registro, y simplemente configurarlo.

{{user.is_authenticated }}

Es verdad, a pesar de que ya fui a / accounts / cierre de sesión / cerrar sesión y el usuario cabo.

{{user.is_anonymous }} 

También devuelve verdadero. De acuerdo con documentos de Django, los dos deben ser diferentes:

  

is_anonymous: siempre devuelve False. Esta es una manera de diferenciar los objetos de usuario y AnonymousUser. En general, se debe preferir el uso is_authenticated () para este método.

y

  

is_authenticated: Siempre devuelve True. Esta es una manera de saber si el usuario ha sido autenticado. Esto no implica ningún permiso, y no comprueba si el usuario está activo -. Sólo indica que el usuario ha proporcionado un nombre de usuario y una contraseña válidos

Estoy utilizando las vistas estándar que vienen con Django-registro y no los han tocado todavía. En el tempalate tengo el siguiente código:

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

¿Dónde sería el problema? Yo estaré muy agradecido!

ACTUALIZACIÓN: he notado que en la página principal, que tanto is_authenticated y el retorno id_anonymous verdadera, mientras que si voy a / accounts / login antes loging en, sólo devuelve is_anonymous verdaderos como debe ser. Y también, en la página principal, tengo la siguiente vista si eso ayuda:

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

ACTUALIZACIÓN 2: impresión (request.user.is_authenticated ()) da Falso. Entonces, tengo:

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

y en la plantilla, user.is_authenticated devuelve falso.

ACTUALIZACIÓN 3: Si uso render_to_response, en lugar de render_jinja, todo es bueno. aún no se sabe cómo solucionar este problema sin embargo: (

¿Fue útil?

Solución

Parece como si estuviera tratando de averiguar dos cosas a la vez; ¿cuál es la forma correcta de las plantillas Jinja uso y lo que es el trato con el Usuario / AnonymousUser. Tal vez tratar de averiguar estos problemas uno a la vez.

No tengo ninguna experiencia con jinja pero es posible que desee comprobar y asegurarse de que usted está tomando diferencias entre jinja y Django plantilla de sintaxis en cuenta. La diferencia más grande que conozco es que una llamada al método requiere un paréntesis explícita. Por lo que las llamadas is_authenticated y is_anonymous en su necesidad ejemplo paréntesis.

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

Si eso no resuelve el problema, intente instalar django-debug-barra de herramientas y echar un vistazo al contexto de la plantilla. Comprobar y ver si es user Ninguno o un objeto (Usuario o AnonymousUser).

También puede leer sobre AnonymousUser y ver un ejemplo de comprobar para un usuario autenticado en la documentación. En pocas palabras, para un objeto AnonymousUser is_anonymous () siempre devuelve True en vez de Falso y is_authenticated () siempre devuelve falso en lugar de True.

Otros consejos

Smack en la cabeza. Leí en alguna parte:

  

Si user.is_authenticated:       .... # siempre cierto, ya que es un método!

Y así, en lugar de tener {{}} user.is_authenticated en la plantilla, debe ser {{user.is_authenticated ()}}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top