AdminLTE Flask模板多级菜单展开异常问题求助
问题分析
你当前的问题是因为仅在顶级Control菜单的<li>上添加了menu-open类,只要URL包含controll就会触发这个类,导致Control下所有一级子菜单(SKC、SKD)全部展开,而不是只展开当前页面所属的子菜单分支。另外代码里存在拼写不一致(controll和control混用)、HTML标签未闭合的问题,也会影响菜单逻辑。
解决方案
核心思路是给每一级带子菜单的has-treeview项单独控制menu-open类,只有当前页面属于该子菜单分支时,才让这个子菜单展开。同时统一拼写、修复标签结构:
修改后的完整代码
<!-- Sidebar Menu --> <nav class="mt-2"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <!-- Add icons to the links using the .nav-icon class with font-awesome or any other icon font library --> <!-- Menu: Control --> <li class="nav-item has-treeview {% if 'controll' in segment %} menu-open {% endif %}"> <a href="#" class="nav-link {% if 'controll' in segment %} active {% endif %}"> <i class="nav-icon fas fa-tachometer-alt"></i> <p> Control <i class="right fas fa-angle-left"></i> </p> </a> <!-- SubMenu: Level 1 --> <ul class="nav nav-treeview" role="menuitem"> <!-- 第一级子菜单:SKC --> <li class="nav-item has-treeview {% if 'controll-skc' in segment %} menu-open {% endif %}"> <a href="#" class="nav-link {% if 'controll-skc' in segment %} active {% endif %}"> <i class="far fa-circle nav-icon"></i> <p>SKC</p> <i class="right fas fa-angle-left"></i> </a> <!-- SubMenu: Level 2 --> <ul class="nav nav-treeview"> <li class="nav-item"> <a href="/controll-skc-0" class="nav-link {% if 'controll-skc-0' in segment %} active {% endif %}"> <i class="far fa-dot-circle nav-icon"></i> <p>SKC-0</p> </a> </li> <li class="nav-item"> <a href="/controll-skc-1" class="nav-link {% if 'controll-skc-1' in segment %} active {% endif %}"> <i class="far fa-dot-circle nav-icon"></i> <p>SKC1</p> </a> </li> </ul> </li> <!-- 修复SKC的li标签闭合 --> <!-- 第一级子菜单:SKD --> <li class="nav-item has-treeview {% if 'controll-skd' in segment %} menu-open {% endif %}"> <a href="#" class="nav-link {% if 'controll-skd' in segment %} active {% endif %}"> <i class="far fa-circle nav-icon"></i> <p>SKD</p> <i class="right fas fa-angle-left"></i> </a> <!-- SubMenu: Level 2 --> <ul class="nav nav-treeview"> <li class="nav-item"> <a href="/controll-skd-3" class="nav-link {% if 'controll-skd-3' in segment %} active {% endif %}"> <i class="far fa-dot-circle nav-icon"></i> <p>SKD3</p> </a> </li> </ul> </li> </ul> </li> </ul> </nav>
关键修改点
- 分级别控制
menu-open:给SKC、SKD的has-treeview标签分别添加条件判断,只有当前URL包含对应子菜单标识时,才添加menu-open类,确保仅展开当前页面所属的分支。 - 统一拼写:将代码中混用的
controll和control统一为controll(和你的URL路径保持一致),避免条件判断失效。 - 修复HTML结构:补全了SKC子菜单的
<li>闭合标签,避免DOM结构错误导致菜单行为异常。 - 精准激活状态:给SKD的二级菜单也添加了
active类的判断逻辑,确保当前页面的菜单项正确高亮。
这样修改后,访问SKC-0页面时,只会展开Control -> SKC的菜单分支,SKD分支保持收起状态,符合你期望的效果。
内容的提问来源于stack exchange,提问作者Pawel
相关产品推荐
相关产品推荐

