How to check (in template) if user belongs to a group
You need custom template tag:
from django import templateregister = 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/
In your app create a folder 'templatetags'. In this folder create two files:
__init__.py
auth_extras.py
from django import templatefrom 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/
I'd say that the best way is:
yourapp/templatetags/templatetagname.py
from django import templateregister = template.Library()@register.filter(name='has_group')def has_group(user, group_name): return user.groups.filter(name=group_name).exists()
yourapp/templates/yourapp/yourtemplate.html:
{% load has_group %}{% if request.user|has_group:"mygroup" %} <p>User belongs to my group</p>{% else %} <p>User does not belong to my group</p>{% endif %}
EDIT: added line with template tag loading as was advised in comments.
EDIT2: fixed minor typo.