【问题标题】:Django - Show/hide urls in base html dependant on user group?Django - 在依赖于用户组的基本 html 中显示/隐藏 url?
【发布时间】:2016-09-20 07:51:36
【问题描述】:

我想尝试根据用户组在我的导航页面中显示或隐藏 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,
    })    

模板.html

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

【问题讨论】:

  • 这有点不清楚。您如何确定用户是 IT 还是网络?为什么不能在模板中这样做?
  • 没有global.py,但是你可以写一个自定义的上下文管理器来完成这个。
  • 您在寻找 TEMPLATE_CONTEXT_PROCESSORS 吗?
  • 如果可以选择通过 Django 的组处理此问题:请参阅 stackoverflow.com/a/35977488/469111
  • @DanielRoseman 认为我的代码有点混乱,我确实在 django admin 中有用户组,我会在模板中使用这些作为参考

标签: python django


【解决方案1】:

我确实在 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 %}

【讨论】:

    【解决方案2】:

    对我来说最简单的解决方法是https://stackoverflow.com/a/17087532/8326187。 在这里您不必创建自定义模板标签。

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

    【讨论】:

      【解决方案3】:

      你需要创建 context_processors.py 并创建一个函数说

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

      然后在设置中 TEMPLATE_CONTEXT_PROCESSORS = ("path_to_context_processor.foo") 这样,您可以在所有模板中使用 foo 变量,而无需在所有视图中显式定义。 您也可以在这里查看:https://rubayeet.wordpress.com/2009/10/31/django-how-to-make-a-variable-available-in-all-templates/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 2022-07-01
        • 2012-02-25
        • 1970-01-01
        相关资源
        最近更新 更多