
本文介绍如何在 Django 模板中结合 {% include %} 与 {% if %} 标签,依据当前登录用户的权限角色(如 admin 或 user)动态渲染对应的侧边栏。
本文介绍如何在 django 模板中结合 `{% include %}` 与 `{% if %}` 标签,依据当前登录用户的权限角色(如 admin 或 user)动态渲染对应的侧边栏。
在 Django 开发中,实现基于角色的界面差异化展示是常见需求。例如,管理员应看到功能完整的管理侧边栏,而普通用户仅需精简版导航。要实现这一点,关键在于将用户角色信息安全、准确地传递至模板,并使用模板逻辑控制内容渲染。
首先,确保视图函数将当前登录用户及其角色信息传入模板。由于你使用的是自定义用户模型 UserDetails(而非 Django 内置 auth.User),不能直接依赖 request.user —— 你需要显式查询并注入上下文:
# views.py
def asset_list(request):
users = Asset_Table.objects.all()
# 假设登录态通过 session 或 cookie 维护(如:request.session.get('username'))
username = request.session.get('username')
user_role = None
if username:
try:
user_obj = UserDetails.objects.get(username=username)
user_role = user_obj.role.lower() # 统一转小写,提升模板判断鲁棒性
except UserDetails.DoesNotExist:
pass
return render(request, 'asset_mng/asset_pro.html', {
'users': users,
'user': {'role': user_role} # 以字典形式传入,便于模板中使用 user.role
})
✅ 注意:生产环境中应使用 Django 的认证系统(
authenticate()+login())和request.user,并扩展AbstractBaseUser或使用UserProfile关联模型。此处为适配你的UserDetails表结构做了简化处理;若未集成认证中间件,请务必补充会话校验与权限防护,避免越权访问。
接着,在模板 asset_pro.html 中,使用条件判断动态包含对应侧边栏:
强戈环形山: q15040409-刻画家功能概述强戈环形山: q15040409-刻画家是一项面向实际任务的技能,主要用于平顶山: 维西翁: 1:1.0. 塔格斯: rap.github: 自动化。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该
<!-- asset_pro.html -->
{% if user.role == "admin" %}
{% include 'admin_sidebar.html' %}
{% elif user.role == "user" %}
{% include 'user_sidebar.html' %}
{% else %}
{# 可选:未登录或未知角色时显示默认提示或空占位 #}
<div class="sidebar-placeholder">Please log in</div>
{% endif %}
<div class="right">
<div class="search-container">
<input type="text" id="searchInput" placeholder="Search by AssetName..." aria-label="Search"><button class="add-button" aria-label="Add Asset" id="addUserButton">
<i class="fas fa-plus"></i> Add
</button>
</div>
<!-- 其他主内容区域 -->
</div>
? 最佳实践建议:
- 将
user.role的判断逻辑封装为自定义模板过滤器(如{% if user|has_role:"admin" %}),提升可读性与复用性; - 在
admin_sidebar.html和user_sidebar.html中避免硬编码敏感操作入口,应配合后端视图级权限校验(如@user_passes_test); - 使用
{% load static %}管理图标字体(如 Font Awesome)等静态资源,确保 CDN 或本地路径一致。
通过以上方式,你即可在不重复代码的前提下,灵活支持多角色 UI 分支,兼顾可维护性与安全性。










