How to access the user profile in a Django template?

Viewed 55545

I'm storing some additional per-user information using the AUTH_PROFILE_MODULE.

We can access the user in a Django template using {{ request.user }} but how do we access fields in the profile since the profile is only accessible via a function user.get_profile() ?

Is it really required to explicitly pass the profile into the template every time?

6 Answers

Use {{ request.user.get_profile.whatever }}. Django's templating language automatically calls things that are callable - in this case, the .get_profile() method.

Not sure why it's different for me, but I need to use {{user}} rather than {{request.user}}.

Yes it is possible to access profile from template using request.user.get_profile

However there is a small caveat: not all users will have profiles, which was in my case with admin users. So calling directly {{ request.user.get_profile.whatever }} from the template will cause an error in such cases.

If you are sure all your users always have profiles it is safe to call from template, otherwise call get_profile() from within try-except block in your view and pass it to the template.

Working !

In your profile model provide related_name

user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)

Then in template use. Here company_name is field in profile table

{{ request.user.user_profile.company_name }}
Related