Python Django-根据用户组在基本html中显示/隐藏URL?

Python Django-根据用户组在基本html中显示/隐藏URL?,python,django,Python,Django,我想尝试根据用户组在导航页面中显示或隐藏URL。 目前,我正在添加到每个视图的顶部,并通过一个值发送到模板并进行检查,但这似乎不是很有效,而且如果视图不需要身份验证且未设置该值,这会破坏模板吗 有更好的方法吗? 像一个global.py,在那里我可以检查和设置它,然后在任何模板中使用它?还是完全不同的东西 view.py Authorised_user = '' if request.user.is_authenticated(): Authorised_user = 'IT' @lo

我想尝试根据用户组在导航页面中显示或隐藏URL。 目前,我正在添加到每个视图的顶部,并通过一个值发送到模板并进行检查,但这似乎不是很有效,而且如果视图不需要身份验证且未设置该值,这会破坏模板吗

有更好的方法吗? 像一个global.py,在那里我可以检查和设置它,然后在任何模板中使用它?还是完全不同的东西

view.py

Authorised_user = ''
if request.user.is_authenticated():
    Authorised_user = 'IT'

@login_required
def index(request):

    return render(request, 'service/index.html', {
        'Authorised': Authorised_user,
    })    
template.html

{% if Authorised == 'IT' or Authorised =='Netwworks' %}
 <a href="link">Link</a>
{% endif %}

您需要创建context_processors.py并创建一个函数,比如

def foo():
   Authorised_user = ''
   if request.user.is_authenticated():
     Authorised_user = 'IT'
然后开始 模板\u上下文\u处理器=路径\u到\u上下文\u处理器.foo 通过这种方式,您可以在所有模板中使用foo变量,而无需在所有视图中显式定义。 您也可以在此处查看:

我在django admin中有用户组

基于

在适当的位置创建user_tags.py/group_tags.py。e、 g.auth_extra/templatetags/user_tags.py

然后在模板中:

{% load user_tags %}

{% if request.user|in_group:"IT"%}
  <a href="link">IT only link</a>
{% endif %}

{% if request.user|in_group:"Netwworks"%}
  <a href="link"> Netwworks only link</a>
{% endif %}

对我来说,最简单的方法是。 在这里,您不必创建自定义模板标记

  {% if request.user.groups.all.0.name == "groupname" %}
    ...
  {% endif %}

这有点不清楚。您如何确定用户是IT还是网络?为什么你不能在模板中这样做呢?没有global.py,但是你可以编写一个自定义的上下文管理器来完成这项工作。你在寻找模板上下文处理器吗?如果可以通过Django的组来处理这个问题:请看@DanielRoseman我觉得我的代码中有点混乱,我在Django admin中有用户组,我想在模板中使用它们作为参考
  {% if request.user.groups.all.0.name == "groupname" %}
    ...
  {% endif %}