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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:16:06