当前位置:  开发笔记 > 编程语言 > 正文

如何检查(在模板中)用户是否属于某个组

如何解决《如何检查(在模板中)用户是否属于某个组》经验,为你挑选了4个好方法。

如何检入模板用户是否属于某个组?

有可能在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/



1> mishbah..:

您需要自定义模板标记:

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/


@danielmaxx你可以通过`Group.objects.filter(name = group_name).exists()来获得一个bool.
为了避免多次查询,我建议使用`return user.groups.filter(name = group_name).exists()`

2> fuser60596..:

在您的应用中创建一个文件夹'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/



3> muccix..:

注意如果数据库中不存在该组,您将获得异常.

自定义模板标记应为:

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 %}



4> Alex K...:

我会说最好的方法是:

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 %}

编辑:添加了带有模板标记加载的行,如评论中所建议的那样.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有