【问题标题】:Django: Hide button in template, if user is not super-userDjango:如果用户不是超级用户,则隐藏模板中的按钮
【发布时间】:2012-04-21 09:09:15
【问题描述】:

如何让模板/视图识别登录用户是否是超级用户?

如果用户不是超级用户,我希望完全隐藏我的表单(在模板中)上的某些按钮

你会怎么做呢?

【问题讨论】:

    标签: django django-models django-forms django-templates django-users


    【解决方案1】:

    实际上,当您尝试检查登录 html 模板天气时,用户是否是超级用户,您将无法做到这一点,因为在那种情况下,您可以在 views.py 文件中检查该用户是是否超级,然后将其重定向到您想要的任何地方。 you can do some thing like this as you can see in start function

    【讨论】:

    • 请不要添加代码作为图片的链接。相反,edit 你的答案并将代码粘贴为格式化文本。
    【解决方案2】:

    如 cmets 中所述,您可以使用模板中自动提供的 User 对象:

    {% if user.is_superuser %}
    <div class="alert alert-success" role="alert">
    You are logged in as {{user.first_name}}, here are the
    <a href="/admin/">admin pages</a> for changing content.
    </div>
    {% endif %}
    

    您也可以使用user.is_staff,这可能更合适。

    【讨论】:

      【解决方案3】:

      User 对象上查看is_superuser

      {% if request.user.is_superuser %}
          ...
          <button>...</button>
          ...
      {% else %}
      ...
      {% endif %}
      

      编辑:@mustafa-0x cmets 之后

      以上假设您的TEMPLATE_CONTEXT_PROCESSORS 设置中包含django.core.context_processors.request这不是默认设置

      default setting for TEMPLATE_CONTEXT_PROCESSORS:

      TEMPLATE_CONTEXT_PROCESSORS = (
          'django.contrib.auth.context_processors.auth',
          'django.core.context_processors.debug',
          'django.core.context_processors.i18n',
          'django.core.context_processors.media',
          'django.core.context_processors.static',
          'django.core.context_processors.tz',
      #    'django.core.context_processors.request',
          'django.contrib.messages.context_processors.messages',
      )
      

      已经包含django.contrib.auth.context_processors.auth(特别是不包括request上下文处理器),这意味着在大多数情况下,您已经可以访问{{ user }},而无需通过视图将其添加到您的上下文中,或启用request 上下文处理器以通过{{ request.user }} 访问上述用户

      【讨论】:

      • 这不只是检查用户是否已通过身份验证吗?我需要知道他们是否是超级用户
      • @TimmyO'Mahony 代码不起作用并且链接已损坏...介意解释您拒绝编辑的原因吗?
      • 你改变了意思。在模板中,user 对象通常可以通过request 访问——您删除了request,这意味着需要将user 对象添加到视图的上下文中,这对于大多数人来说都是浪费的无论如何请求。至于链接,你是对的,它不起作用。我已经更新了。
      • @TimmyO'Mahony 我不认为你是对的:docs.djangoproject.com/en/1.5/topics/auth/default/#users
      • 是吗?你想要什么?我的例子是完全有效的,我已经解释了原因。文档已决定不使用通常通过上下文处理器在模板中固有可用的request 对象,而是假设您在呈现模板之前已在视图中添加了user 对象。我不想做出这样的假设并使用request 对象。没有对错,所以请不要再挑拨离间了
      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 2015-07-16
      • 2021-03-14
      • 2021-06-14
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多