首页 > 解决方案 > 如何限制 Django 中的管理链接/按钮?

问题描述

这就是我所期望的:如果用户的位置为“1”(管理员),则 home.html 中的导航菜单必须显示指向管理页面的“管理员”链接。如果用户的位置为“2”(用户),则不会显示链接。

但是,当我运行服务器时,此代码会生成与注册用户一样多的管理链接。我只想显示当前登录用户的一个链接。我怎样才能做到这一点?我知道“for user in position”有问题,但是如何为当前登录的用户修复它?

模型.py

class Profile(models.Model):
    positions = (
        ('1', 'Admin'),
        ('2', 'User'),
    )

    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    position = models.CharField(max_length=50, default='Position', choices=positions)

视图.py

def home(request):
    user_position = Profile.objects.all()
    return render(request, 'home.html', {
        'position': user_position,
        })

主页.html

{% for user in position %}
    {% if user.position == '1' %}
        <a class="nav-link" aria-current="page" href="/admin">Admin</a>
    {% endif %}
{% endfor %}

标签: pythondjango

解决方案


您还可以在模板中使用is_superuser属性来实现此目的:

{% if user.is_superuser %}
 <a href="#">admin</a>
{% endif %}

如果您只想根据用户名检查它,您可以使用:

{% if user.username == "Admin" %}
   <a href="#">admin</a>
{% endif %}

您可以做的另一件事是在管理面板中创建 2 个组;管理员和用户。然后你必须创建一个自定义模板标签(例如has_group)来显示基于这些组的导航项,我认为这是一个更好的解决方案。然后你可以在你的模板中使用这样的东西:

{% if user|has_group:"admin" %} 
    <p>User belongs to the admin group 
{% else %}
    <p>belongs to users group</p>
{% endif %}

推荐阅读