python - 如何限制 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 %}
解决方案
您还可以在模板中使用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 %}
推荐阅读
- javascript - Javascript手风琴在新标签打开时折叠
- c# - 与 firebase 集成的 Unity 可在 Unity 编辑器上运行,但不能在移动设备上运行
- data-protection - 创建金融科技应用 Q re:Open Banking - 在用户之间共享交易数据 Q
- ruby-on-rails - 使用 Net::FTP 强制执行简单的 FTP
- html - 如何使用此边框图像创建面板
- android - 在另一个片段上打开一个半透明片段
- forms - In Xamarin form, is it possible to do a databinding outside a listview, like just in a label?
- sql - SQL查询如果价格高于并且ID低于之前的ID和价格记录则返回记录
- windows - 在重新启动之间保持“Hyper-V 虚拟以太网适配器”IP 地址相同
- typescript - 如何用 jest 模拟打字稿界面?