¿Cómo acceder al perfil de usuario en una plantilla de Django?
-
05-07-2019 - |
Pregunta
Estoy almacenando información adicional por usuario utilizando AUTH_PROFILE_MODULE
.
Podemos acceder al usuario en una plantilla de Django usando {{request.user}}
pero, ¿cómo accedemos a los campos en el perfil ya que solo se puede acceder al perfil a través de una función usuario? get_profile ()
?
¿Realmente se requiere que pase el perfil explícitamente a la plantilla cada vez?
Solución
Utilice {{request.user.get_profile.whatever}}
. El lenguaje de plantillas de Django llama automáticamente a cosas que se pueden llamar, en este caso, el método .get_profile ()
.
Otros consejos
No estoy seguro de por qué es diferente para mí, pero necesito usar {{user}} en lugar de {{request.user}}.
Sí, es posible acceder al perfil desde la plantilla usando request.user.get_profile
Sin embargo, hay una pequeña advertencia : no todos los usuarios tendrán perfiles, como en mi caso con los usuarios administradores. Así que llamando directamente
{{request.user.get_profile.whatever}}
de la plantilla causará un error en tales casos.
Si está seguro de que todos sus usuarios siempre tienen perfiles, es seguro llamar desde la plantilla; de lo contrario, llame a get_profile ()
desde el bloque try-except en su vista y páselo a la plantilla.
Si está utilizando Django > 1.5 ya no puede usar get_profile
.
Si tienes una aplicación heredada, debes eliminar AUTH_PROFILE_MODULE = 'myapp.profile'
de tu settings.py
.
Si usa models.OneToOneField (User)
en su clase de perfil, simplemente puede usar
{{ request.user.profile.whatever }}
en tu plantilla de Django
Si ayuda a alguien, usé lo siguiente en mi plantilla:
Nombre de usuario: {{user.username}}
Nombre completo del usuario: {{user.get_full_name}}
Grupo de usuarios: {{user.groups.all.0}}
Correo electrónico: {{user.email}}
La sesión comenzó en: {{user.last_login}}
Un resultado de ejemplo es así:
Usuario: auditor ezio
Grupo de usuarios: auditGroup
Nombre de usuario: testUser03
Correo electrónico: testuser03@auditor.com
La sesión comenzó el 16 de abril de 2018 a las 9:38 p.m.
Gracias :)
Trabajando!
En tu modelo de perfil, proporciona related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Luego en uso de plantilla. Aquí company_name es el campo en la tabla de perfiles
{{ request.user.user_profile.company_name }}