如何访问 Django 模板中的用户配置文件?

我正在使用 AUTH_PROFILE_MODULE存储一些额外的每个用户信息。

我们可以使用 {{ request.user }}访问 Django 模板中的用户,但是如何访问概要文件中的字段,因为概要文件只能通过函数 user.get_profile()访问?

是否真的需要每次都显式地将概要文件传递到模板中?

55895 次浏览

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

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.

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

If you are using Django > 1.5 you can no longer use get_profile.

If you have a legacy app, you should remove AUTH_PROFILE_MODULE = 'myapp.profile' from your settings.py.

If you use models.OneToOneField(User) in your Profile class, you can simply use

\{\{ request.user.profile.whatever }}

in your Django template

If it helps anyone, I used the followings in my template:

Username: \{\{ user.username }}

User Full name: \{\{ user.get_full_name }}

User Group: \{\{ user.groups.all.0 }}

Email: \{\{ user.email }}

Session Started at: \{\{ user.last_login }}

A sample result is like this:

User: auditor ezio

User Group: auditGroup

Username: testUser03

Email: testuser03@auditor.com

Session Started at- April 16, 2018, 9:38 p.m.

Thanks :)

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 }}