How to check (in template) if user belongs to a group

后端 未结 9 1860
广开言路
广开言路 2020-12-07 20:38

How to check in template whether user belongs to some group?

It is possible in a view which is generating the template but what if I want

相关标签:
9条回答
  • 2020-12-07 21:05

    In your app create a folder 'templatetags'. In this folder create two files:

    __init__.py

    auth_extras.py

    from django import template
    from django.contrib.auth.models import Group 
    
    register = template.Library()
    
    @register.filter(name='has_group')
    def has_group(user, group_name): 
        group = Group.objects.get(name=group_name) 
        return True if group in user.groups.all() else False
    

    It should look like this now:

    app/
        __init__.py
        models.py
        templatetags/
            __init__.py
            auth_extras.py
        views.py
    

    After adding the templatetags module, you will need to restart your server before you can use the tags or filters in templates.

    In your base.html (template) use the following:

    {% load auth_extras %}
    

    and to check if the user is in group "moderator":

    {% if request.user|has_group:"moderator" %} 
        <p>moderator</p> 
    {% endif %}
    

    Documentation: https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

    0 讨论(0)
  • 2020-12-07 21:11

    Watch out that you'll get an exception if the group does not exist in the DB.

    The custom template tag should be:

    from django import template
    from django.contrib.auth.models import Group
    
    register = template.Library()
    
    @register.filter(name='has_group')
    def has_group(user, group_name):
        try:
            group =  Group.objects.get(name=group_name)
        except Group.DoesNotExist:
            return False
    
        return group in user.groups.all()
    

    Your template:

    {% if request.user|has_group:"mygroup" %} 
        <p>User belongs to my group 
    {% else %}
        <p>User doesn't belong to mygroup</p>
    {% endif %}
    
    0 讨论(0)
  • 2020-12-07 21:13

    You need custom template tag:

    from django import template
    
    register = template.Library() 
    
    @register.filter(name='has_group') 
    def has_group(user, group_name):
        return user.groups.filter(name=group_name).exists() 
    

    In your template:

    {% if request.user|has_group:"mygroup" %} 
        <p>User belongs to my group 
    {% else %}
        <p>User doesn't belong to mygroup</p>
    {% endif %}
    

    Source: http://www.abidibo.net/blog/2014/05/22/check-if-user-belongs-group-django-templates/

    Docs: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

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