在HTML中获取Django用户组
我正在尝试用HTML获取Django用户组的if标记。这就是我所尝试的:在HTML中获取Django用户组,html,django,Html,Django,我正在尝试用HTML获取Django用户组的if标记。这就是我所尝试的: {% ifequal user.groups.all.0 'ABC' %} {% endif %} {% if request.user|has_group:"mygroup" %} <h1>Has group mygroup</h1> {% endif %} 但这是行不通的。还有什么别的办法吗?试试这个: {% for group in request.user.groups.all %}
{% ifequal user.groups.all.0 'ABC' %}
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
但这是行不通的。还有什么别的办法吗?试试这个:
{% for group in request.user.groups.all %}
{% if group.name == 'ABC' %}{% endif %}
{% endfor %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
或
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
您必须从请求上下文变量访问当前用户对象。为此,请确保模板设置中有django.template.context\u processors.request
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
request.user.groups.all.0
返回一个组模型对象,因此您必须与name
字段进行比较。尝试以下操作:
{% for group in request.user.groups.all %}
{% if group.name == 'ABC' %}{% endif %}
{% endfor %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
或
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
您必须从请求上下文变量访问当前用户对象。为此,请确保模板设置中有django.template.context\u processors.request
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
request.user.groups.all.0
返回一个组模型对象,因此您必须与name
字段进行比较。我认为您必须在这里使用一点Python。例如,a:
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
在模板中:
{% if request.user|has_group:"ABC" %}
...
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
(来源:)
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
但也许你真的应该在这里使用权限
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
编辑:下面是一个更完整的自定义模板标记示例:
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
settings.py:
INSTALLED_APPS = [
...
'yourapp',
...
]
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
文件系统:
yourproject/
manage.py
yourproject/
settings.py
wsgi.py
...
yourapp/
__init__.py
templatetags/
__init__.py
yourapp_extras.py
...
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
yourapp_extras.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()
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
模板:
{% load yourapp_extras %}
{% if request.user|has_group:"ABC" %}
...
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
为了更透彻地理解这一点,我强烈建议您阅读Django的优秀文档。我认为您必须在这里使用一点Python。例如,a:
<h1>{{ user.groups.all.0 }}</h1>
{% if user.groups.all.0.name == 'Team2' %}
<h1>YES</h1>
{% else %}
<h1>NO</h1>
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
在模板中:
{% if request.user|has_group:"ABC" %}
...
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
(来源:)
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
但也许你真的应该在这里使用权限
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
编辑:下面是一个更完整的自定义模板标记示例:
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
settings.py:
INSTALLED_APPS = [
...
'yourapp',
...
]
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
文件系统:
yourproject/
manage.py
yourproject/
settings.py
wsgi.py
...
yourapp/
__init__.py
templatetags/
__init__.py
yourapp_extras.py
...
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
yourapp_extras.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()
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
模板:
{% load yourapp_extras %}
{% if request.user|has_group:"ABC" %}
...
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
为了更透彻地理解这一点,我强烈建议阅读Django的优秀文档
<h1>{{ user.groups.all.0 }}</h1>
{% if user.groups.all.0.name == 'Team2' %}
<h1>YES</h1>
{% else %}
<h1>NO</h1>
{% endif %}
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
在下面的文件结构中的组内\u check.py
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
--app
|templates
|templatetags
|-- group_check.py
在下面的文件结构中的组内\u check.py
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
--app
|templates
|templatetags
|-- group_check.py
你是说登录用户?是的。我想要登录用户,然后使用
request.user.which
,你是说登录用户吗?是的。我想要登录的用户然后使用request.user.which
,在HTML模板本身中没有办法解决这个问题吗?在视图中执行它对我的项目来说是非常复杂的,我无法让它在我的项目中工作。我一直发现utils\u extras找不到,即使它位于正确的目录中。在模板中可以使用多种方法,但我确实建议使用自定义模板标记。这比听起来容易多了。一旦你完成了,你就不想回去了;)我用一个更完整的自定义模板标记示例更新了答案。如果仍然出现错误,请再次检查templatetags模块是否位于正确的位置,名称是否匹配,以及是否正确使用了register
。此外,您的应用程序需要安装在安装的应用程序中。是否无法在HTML模板本身中解决此问题?在视图中执行它对我的项目来说是非常复杂的,我无法让它在我的项目中工作。我一直发现utils\u extras找不到,即使它位于正确的目录中。在模板中可以使用多种方法,但我确实建议使用自定义模板标记。这比听起来容易多了。一旦你完成了,你就不想回去了;)我用一个更完整的自定义模板标记示例更新了答案。如果仍然出现错误,请再次检查templatetags模块是否位于正确的位置,名称是否匹配,以及是否正确使用了register
。另外,你的应用程序需要安装在已安装的应用程序中。嘿,这也不行。但是,如果我正在设置我的{{user.groups.all.0}},那就是在输出中显示组。但是if语句似乎不起作用,我已经在Django 1.8上测试过了,非常好。谢谢你的帮助。我这边似乎有一些不稳定的行为。如果在一个完全不相关的if标记中使用,那么它是有效的。让我看看是什么导致了这种情况。这种解决方案可行,但效率有点低,因为您从数据库中获取用户的所有组,并在模板中循环所有组,而实际上您只想知道用户是否是给定组的成员。它也不是很可重用。我的情况总是评估为错误。有没有什么常见的错误可能导致它?嘿,这也不行。但是,如果我正在设置我的 {{user.groups.all.0}},那就是在输出中显示组。但是if语句似乎不起作用,我已经在Django 1.8上测试过了,非常好。谢谢你的帮助。我这边似乎有一些不稳定的行为。如果在一个完全不相关的if标记中使用,那么它是有效的。让我看看是什么导致了这种情况。这种解决方案可行,但效率有点低,因为您从数据库中获取用户的所有组,并在模板中循环所有组,而实际上您只想知道用户是否是给定组的成员。它也不是很可重用。我的情况总是评估为错误。是否有可能导致这种情况的常见错误?