from django import template
from django.utils.safestring import SafeUnicode
@register.filter
def in_group(user, group):
"""Returns a boolean if the user is in the given group, or comma-separated
list of groups.
Usage::
{% if user|in_group:"Friends" %}
...
{% endif %}
or::
{% if user|in_group:"Friends,Enemies" %}
...
{% endif %}
"""
if not isinstance(group, SafeUnicode):
raise template.TemplateSyntaxError("Group name needs to be a string.")
return bool(user.groups.filter(name__in=group.split(',')).values('name'))
Comments
maybe you could use user.groups.values('name') just to make it more efficient
#
Thanks, good improvement:
#
made a few mods so it can accept multiple group names... here it is -> 895
#
To check if a user is in a comma-separated list of groups just change the last line to the following (it is slightly less efficient than just checking one group):
return bool(user.groups.filter(name__in=groups.split(',')).values('name'))#
Just re-ran the speed tests and I was mistaken -- there is virtual no performance difference, so I updated the main snippet. Thanks for the idea.
#