Estoy almacenando información adicional por usuario usando el 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 el perfil solo es accesible a través de una función user.get_profile()
?
¿Es realmente necesario pasar explícitamente el perfil a la plantilla cada vez?
python
django
django-templates
Swaroop CH
fuente
fuente
No estoy seguro de por qué es diferente para mí, pero necesito usar {{user}} en lugar de {{request.user}}.
fuente
django.template.context_processors.request
inserta larequest
plantilla en, mientras que ladjango.contrib.auth.context_processors.auth
insertauser
en contexto. docs.djangoproject.com/en/1.10/ref/templates/api/…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, que fue en mi caso con los usuarios administradores. Por tanto, llamar directamente
{{ request.user.get_profile.whatever }}
desde la plantilla provocará 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
get_profile()
desde dentro del bloque try-except en su vista y páselo a la plantilla.fuente
{{ request.user.get_profile.whatever }}
, pero{{ request.user.get_profile }}
funcionará y se puede usar para verificar si existe un perfil o no en las versiones actuales. Consulte docs.djangoproject.com/en/dev/ref/templates/api/… . Sin embargo, hay una nota que cambiará en la versión de desarrollo, vea el párrafo anterior al que me vinculé.Si está usando Django> 1.5 ya no puede usar
get_profile
.Si tiene una aplicación heredada, debe eliminarla
AUTH_PROFILE_MODULE = 'myapp.profile'
de susettings.py
.Si usa
models.OneToOneField(User)
en su clase de perfil, simplemente puede usaren tu plantilla de Django
fuente
request
teclado en el frente?Si ayuda a alguien, utilicé lo siguiente en mi plantilla:
Nombre de usuario:
{{ user.username }}
Usuario Nombre completo:
{{ user.get_full_name }}
Grupo de usuario:
{{ user.groups.all.0 }}
Correo electrónico:
{{ user.email }}
La sesión comenzó en:
{{ user.last_login }}
Un resultado de muestra es así:
Gracias :)
fuente
Trabajando !
En su modelo de perfil, proporcione 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 un campo en la tabla de perfil
fuente