获取用户组中的模板(Get user group in a template)

2019-06-24 07:20发布

我想显示的是,根据用户组的用户当前登录的变化,与此逻辑我的视图的内部作为一个菜单,然后设置一个变量在模板中进行检查以确定要显示哪些菜单项....我以前问过这个问题,但我的逻辑是在模板正在做。 所以,现在我想在我看来...菜单看起来如下

   <ul class="sidemenu">
    <li><a href="/">General List </a></li>
    <li><a href="/sales_list">Sales List </a></li>
    <li><a href="/add_vehicle">Add a New Record </a></li>
    <li><a href="/edit_vehicle">Edit Existing Record </a></li>
    <li><a href="/filter">Filter Records </a></li>
    <li><a href="/logout">Logout </a></li>
  </ul>

Suppossing用户管理,他们将看到的一切......不过,假设用户在该组销售,让他们只能看到前两个和最后两个项目......等等。 我也希望根据用户组登录后动态重定向。 有任何想法吗?

Answer 1:

检查权限的标准Django的方法是由个人权限标志,而不是测试的组名。

如果你必须检查组名,是知道用户到组是一个多一对多的关系,就可以得到第一组中有这样的模板组的列表:

{{ user.groups.all.0 }}

或在有条件使用它像这样(未经测试,但应工作):

{% ifequal user.groups.all.0 'Sales' %}
   ...
{% endif %}

如果你与优选的权限模型去,你会做一些像下面这样。

...

  {% if perms.vehicle.can_add_vehicle %}
    <li><a href="/add_vehicle">Add a New Record </a></li>
  {% endif %}
  {% if perms.vehicle.can_change_vehicle %}
    <li><a href="/edit_vehicle">Edit Existing Record </a></li>
  {% endif %}

...

这是由自动为您创建的权限syncdb假设你的应用程序被称为vehicle和模型被称为Vehicle

如果用户是超级用户会自动拥有所有权限。

如果用户是在一个销售组,他们不会有这些车辆的权限(除非您已经添加到那些组当然)。

如果用户是在一个管理组,他们可以拥有这些权限,但您需要将它们添加到组中的Django管理站点。

对于你的另一个问题,重定向登录基于用户组:用户到组是一个多一对多的关系,所以它不是一个真正的好主意,使用它像一个一对多。



Answer 2:

在您的应用程序创建一个user_tags.py / templatetags上面如下:

# -*- coding:utf-8 -*-
from __future__ import unicode_literals

# Stdlib imports

# Core Django imports
from django import template

# Third-party app imports

# Realative imports of the 'app-name' package


register = template.Library()


@register.filter('has_group')
def has_group(user, group_name):
    """
    Verifica se este usuário pertence a um grupo
    """
    groups = user.groups.all().values_list('name', flat=True)
    return True if group_name in groups else False

最后在模板中使用它:

{% if request.user|has_group:"Administradores"%}
      <div> Admins can see everything </div>
{% endif %}


Answer 3:

user.groups.all.0.name == "groupname"


文章来源: Get user group in a template