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

