如何检入模板用户是否属于某个组?
有可能在view
生成template
但是如果我想检查这base.html
是一个扩展模板(它没有它自己的视图功能)怎么办?
我的所有模板都扩展了,base.html
所以在每个模板中检查它都不好view
.
在base.html
包含上部杆,它应包含在其中的按钮根据group
登录用户是(客户,销售商).
在我的base.html
是:
{% if user.is_authenticated %}
这是不够的,因为我必须采取不同的方式对用户Customers
和用户采取不同的行动Sellers
.
所以我想要的是:
{% if user.in_group('Customers') %}Customer
{% endif %} {% if user.in_group('Sellers') %}Seller
{% endif %}
mishbah.. 56
您需要自定义模板标记:
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()
在您的模板中:
{% if request.user|has_group:"mygroup" %}User belongs to my group {% else %}
User doesn't belong to mygroup
{% endif %}
资料来源:http://www.abidibo.net/blog/2014/05/22/check-if-user-belongs-group-django-templates/
文件:https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/
您需要自定义模板标记:
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()
在您的模板中:
{% if request.user|has_group:"mygroup" %}User belongs to my group {% else %}
User doesn't belong to mygroup
{% endif %}
资料来源:http://www.abidibo.net/blog/2014/05/22/check-if-user-belongs-group-django-templates/
文件:https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/
在您的应用中创建一个文件夹'templatetags'.在此文件夹中创建两个文件:
__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
现在看起来应该是这样的:
app/ __init__.py models.py templatetags/ __init__.py auth_extras.py views.py
添加templatetags模块后,您需要重新启动服务器,然后才能在模板中使用标记或过滤器.
在base.html(模板)中使用以下内容:
{% load auth_extras %}
并检查用户是否在"主持人"组中:
{% if request.user|has_group:"moderator" %}moderator
{% endif %}
文档:https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/
注意如果数据库中不存在该组,您将获得异常.
自定义模板标记应为:
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()
你的模板:
{% if request.user|has_group:"mygroup" %}User belongs to my group {% else %}
User doesn't belong to mygroup
{% endif %}
我会说最好的方法是:
yourapp/templatetags/templatetagname.py
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()
yourapp /模板/ yourapp/yourtemplate.html:
{% load has_group %} {% if request.user|has_group:"mygroup" %}User belongs to my group {% else %}
User doesn't belong to mygroup
{% endif %}
编辑:添加了带有模板标记加载的行,如评论中所建议的那样.