Allows you to search if a user belongs to a given group.
Along the same lines as snippet 390, but uses a regular if
tag so it is more flexible.
(Updated for efficiency. Running a boolean test on a QuerySet avoids a bit of unnecessary overhead.)
(Updated to accept a list of groups.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @register.filter
def in_group(user, groups):
"""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 %}
"""
group_list = force_unicode(groups).split(',')
return bool(user.groups.filter(name__in=group_list).values('name'))
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
Comments
maybe you could use user.groups.values('name') just to make it more efficient
#
Thanks, good improvement:
#
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.
#
awesomeness. and for the n00bs like me, don't forget to import force_unicode:
#
This filter gives an error in Django 1.3.
Wrapping it with if user.is_authenticated(): fixes the problem.
#
This snippet is extremely useful, but saundersmatt is right. I recommend replacing the last two lines of the snippet with this:
#
Please login first before commenting.