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

DjangoCMS添加多个show_menu标签避免菜单重复问题咨询

解决DjangoCMS多show_menu标签重复显示及动态菜单配置问题

可以在同一页面添加多个具备CMS管理能力的show_menu标签,你遇到的重复显示问题是因为默认show_menu会渲染所有可见页面,只要通过以下方式配置,就能实现多个独立的动态菜单:

1. 指定菜单根节点区分内容

在CMS后台创建不同的父页面作为各菜单的根节点,然后在模板中通过root_id或root_slug参数指定每个show_menu的渲染范围:

{# 顶部主菜单:仅渲染"main-menu"根页面下的所有子页面 #}
{% show_menu 0 100 100 100 "templates/menu/main_menu.html" root_slug="main-menu" %}

{# 侧边栏菜单:仅渲染"sidebar-menu"根页面下的所有子页面 #}
{% show_menu 0 100 100 100 "templates/menu/sidebar_menu.html" root_slug="sidebar-menu" %}

这样每个菜单只会展示对应根节点下的页面,不会重复显示全站内容。

2. 通过层级参数控制显示范围

如果不需要拆分根节点,可通过show_menu的层级参数控制不同菜单显示的页面层级:

{# 顶部导航:仅显示一级菜单(start_level=0, end_level=1) #}
{% show_menu 0 1 0 0 "templates/menu/top_menu.html" %}

{# 侧边子菜单:仅显示当前页面的子级及以下菜单(start_level=1) #}
{% show_menu 1 100 0 0 "templates/menu/sidebar_menu.html" %}

show_menu参数说明:show_menu start_level end_level extra_inactive extra_active template,调整前四个参数可精准控制菜单的层级范围。

3. 自定义菜单模板实现差异化渲染

为每个show_menu指定独立的模板文件,不仅能区分内容,还能定制不同的样式和交互逻辑。模板中可使用CMS提供的变量(如children、active、selected)来渲染菜单结构:

{# 示例菜单模板:templates/menu/main_menu.html #}
<ul class="main-menu">
  {% for child in children %}
    <li class="{% if child.selected %}active{% endif %}">
      <a href="{{ child.get_absolute_url }}">{{ child.get_menu_title }}</a>
      {% if child.children %}
        <ul class="submenu">
          {% show_menu from_level to_level extra_inactive extra_active template child %}
        </ul>
      {% endif %}
    </li>
  {% endfor %}
</ul>

4. 优化页面可见性设置

在CMS页面编辑的「高级」选项中,可设置页面是否在菜单中显示,避免无关页面出现在指定菜单里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:50:08