如何在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
相关产品推荐
相关产品推荐

