Skip to main content
 首页 » 编程设计

python之Django之根据用户组显示/隐藏基本 html 中的 url

2024年10月24日36飞鱼

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

有更好的方法吗? 像 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, 
    })     

模板.html

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

请您参考如下方法:

i do have the user groups in django admin

基于 Get user group in a template

在适当的地方创建 user_tags.py/group_tags.py。例如auth_extra/templatetags/user_tags.py

from django import template 
 
register = template.Library() 
 
@register.filter('in_group') 
def in_group(user, group_name): 
    return user.groups.filter(name=group_name).exists() 

然后在你的模板中:

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