websites - libro django 2018
Tiene problemas con user.is_authenticated en la plantilla django (2)
Si el procesador de contexto de autenticación está habilitado, el user
ya se encuentra en el contexto de la plantilla, y usted puede hacer:
{% if user.is_authenticated %}
Si desea acceder a la request
en la plantilla, asegúrese de haber habilitado el procesador de contexto de solicitud .
En tu pregunta, estás usando render_to_response
. Desde Django 1.3, ha sido mejor usar render
lugar de render_to_response
. Usar render_to_response
con RequestContext(request)
funciona en Django <= 1.9, pero desde Django 1.10 en adelante debe usar el acceso directo de render
si desea que los procesadores de contexto funcionen.
return render(request, ''template/login.html'', context)
Lo siento si trataste de ayudarme cuando pregunté esto antes. Tuve que eliminar esa pregunta porque, por algún motivo, no me estaba permitido editar información adicional.
Estoy trabajando para implementar la autenticación de usuario en mi sitio web django. Todo funciona. Mis puntos de vista, modelos, URL, etc. están configurados. Los usuarios pueden registrarse, iniciar sesión y cerrar sesión. El problema que estoy teniendo es con este poco de código:
{% if request.user.is_authenticated %}
<li><a href="/logout">Log Out</a></li>
{% else %}
<li><a href="/login">Log In</a></li>
{% endif %}
Incluso cuando estoy conectado, sigue mostrando "Iniciar sesión" como una opción en lugar de "Cerrar sesión". Sin embargo, si hago clic en el enlace, me redireccionará a / profile porque eso es lo que la vista le dice que haga si estoy conectado. Así que, claramente, sabe que estoy conectado, pero la plantilla no está readint user.is_authenticated como verdadero.
La vista relacionada con las solicitudes de inicio de sesión es:
def LoginRequest(request):
if request.user.is_authenticated():
return HttpResponseRedirect(''/profile/'')
if request.method == ''POST'':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data[''username'']
password = form.cleaned_data[''password'']
profile = authenticate(username=username, password=password)
if profile is not None:
login(request, profile)
return HttpResponseRedirect(''/profile/'')
else:
return render_to_response(''template/login.html'', {''form'': form}, context_instance=RequestContext(request))
else:
return render_to_response(''template/login.html'', {''form'': form}, context_instance=RequestContext(request))
else:
'''''' user is not submitting the form, show them login form ''''''
form = LoginForm()
context = {''form'': form}
return render_to_response(''template/login.html'', context, context_instance = RequestContext(request))
Tenga en cuenta que desde Django 1.10, is_authenticated
está decorado con @property y su comportamiento es diferente.
Para los resultados de llamada de usuario NOUTHENTICATED {{user.is_authenticated}}:
CallableBool(True)
(cuando en Django <1.10 era True
)
Para los usuarios AUTENTICADOS llamando a {{user.is_authenticated}} resultados:
CallableBool(False)
(cuando estaba en Django <1.10 era False
)
Si necesita pasar, por ejemplo, a su valor javascript como true
o false
, puede hacerlo con la aplicación de filtro |yesno:"true,false"
<script language="javascript">
var DJANGO_USER = "{{user.is_authenticated|yesno:"true,false"}}";
</script>