You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中根据登录用户角色使用{% include %}标签加载侧边栏模板

Django按角色加载不同侧边栏实现方案

1. 调整视图函数,传递用户角色到模板

首先修改asset_list视图,把当前登录用户的角色信息传入模板上下文。假设登录后用户ID存在会话中,代码如下:

def asset_list(request):
    users = Asset_Table.objects.all()
    user_role = 'user'  # 默认角色
    # 获取当前登录用户的角色
    if 'user_id' in request.session:
        current_user = UserDetails.objects.get(id=request.session['user_id'])
        user_role = current_user.role
    return render(request, 'asset_mng/asset_pro.html', {'users': users, 'user_role': user_role})

如果你的用户系统和Django自带认证关联,可通过request.user关联查询UserDetails获取角色。

2. 模板中用条件判断加载对应侧边栏

在asset_pro.html的侧边栏位置,使用Django模板标签结合{% include %}实现角色判断:

<!-- 动态加载侧边栏 -->
{% if user_role == 'admin' %}
    {% include 'asset_mng/admin_sidebar.html' %}
{% elif user_role == 'user' %}
    {% include 'asset_mng/user_sidebar.html' %}
{% endif %}

注意替换模板路径为你实际的文件路径,确保Django能找到对应的侧边栏模板。

补充优化建议

  • 密码加密:当前UserDetails模型密码为明文存储,必须改用Django加密工具:
    from django.contrib.auth.hashers import make_password, check_password
    
    # 创建用户时加密
    new_user = UserDetails(username='admin', password=make_password('your_password'), role='admin')
    new_user.save()
    
    # 登录验证时校验
    user = UserDetails.objects.get(username='admin')
    if check_password('input_password', user.password):
        # 验证通过,存入会话
        request.session['user_id'] = user.id
    
  • 会话管理:登录成功后务必将用户ID存入request.session,登出时清除会话。

内容的提问来源于stack exchange,提问作者Bruce_Wayne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:40:05