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

Django CMS挂载Apphook的页面详情页菜单丢失active类求助

解决Django CMS Apphook页面详情页菜单Active类丢失问题

我之前也碰到过一模一样的情况,其实不用急着去写自定义Apphook菜单,先试试这个更简便的方案:

快速修复:借助request.current_page判断

问题根源在于:当访问Apphook挂载的详情页时,Django CMS默认的菜单节点不会把这些App内的页面关联到对应的CMS页面,所以child.selected和child.ancestor这两个判断条件不会触发。但好在Django CMS会自动把挂载Apphook的那个CMS页面存入request.current_page——哪怕你在App的视图里,这个值也是能正常获取的。

修改你菜单模板里的active类判断逻辑:

<li class="js-submenuParent {% if child.selected or child.ancestor or (request.current_page and child.page == request.current_page) %}active{% endif %}">

为什么这能生效?

当用户打开活动详情页时,request.current_page会指向你挂载Apphook的「活动列表页」CMS页面。通过对比菜单节点的child.page和这个request.current_page,就能给对应的菜单项加上active类,同时保留原来的selected/ancestor判断,完全不影响其他CMS页面的菜单高亮逻辑。

注意事项

  • 确保你的Apphook已经正确挂载到目标CMS页面(在CMS页面的「高级」设置里选择对应的Apphook)
  • 不要在App的视图里手动修改request.current_page,保持Django CMS的默认行为即可

备选方案:自定义Apphook菜单

如果上面的方案满足不了你的需求(比如你需要把活动详情页作为子项显示在菜单里),那确实需要自定义Apphook菜单。大致步骤是:

  • 创建一个继承自CMSAttachMenu的菜单类
  • 在菜单类的get_nodes方法里,动态添加活动详情页作为挂载Apphook页面的子节点
  • 在App的cms_app.py文件里注册这个菜单

不过这个方案工作量更大,更适合需要复杂菜单结构的场景。

内容的提问来源于stack exchange,提问作者Mærcos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:40:55