How to access the user profile in a Django template?

前端 未结 6 1680
滥情空心
滥情空心 2020-11-30 21:05

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

相关标签:
6条回答
  • 2020-11-30 21:33

    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.

    0 讨论(0)
  • 2020-11-30 21:34

    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 :)

    0 讨论(0)
  • 2020-11-30 21:40

    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

    0 讨论(0)
  • 2020-11-30 21:45

    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 }}
    
    0 讨论(0)
  • 2020-11-30 21:50

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

    0 讨论(0)
  • 2020-11-30 21:52

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

    0 讨论(0)
提交回复
热议问题