django - Django CMS 中自定义菜单的顺序
问题描述
在我的 Django 应用程序中,我使用register_menu
装饰器向 Django CMSes 菜单条目添加了几个自定义菜单条目:
@menu_pool.register_menu
class MyMenu(Menu):
def get_nodes(self, request):
entries = []
entries.append(NavigationNode('foo', '/bar', 1))
...
return nodes
这些菜单条目显示在任何 CMS 菜单之前,即返回的菜单列表{% show_menu %}
首先生成我的条目,然后生成在 CMS 中创建的条目。我希望我的应用程序条目出现在 CMS 条目之后,但我似乎找不到任何有关如何执行此操作的文档。
我希望 ID 会以某种方式影响排序,但事实并非如此。有人建议按照应用程序列出的顺序创建菜单INSTALLED_APPS
,但是将我的应用程序移到最底部也不会改变顺序。
一种解决方案
正如评论中所建议的, aModifier
不仅可以更改单个条目的属性,还可以添加、删除或重新排序条目。
from menus.base import Menu, Modifier
from menus.menu_pool import menu_pool
@menu_pool.register_menu
class MyAppMenu(Menu):
def get_nodes(self, request):
nodes = []
# ...
return nodes
@menu_pool.register_modifier
class MyAppModifier(Modifier):
def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
if not post_cut:
# ...
# move our entries to the back of the list
ours = []
others = []
for n in nodes:
if n.namespace == 'MyAppMenu':
ours.append(n)
else:
others.append(n)
nodes = others + ours
return nodes
菜单系统使用实现的类的名称Menu
作为namespace
菜单条目的属性。在 中Modifier
,我收集了我自己的应用程序添加的所有条目,并将它们放在列表的末尾。
解决方案
推荐阅读
- javascript - 当 img src 没有值时,更新 html 中的默认 img src
- python - pyspark:使用 window() 函数并比较字符串
- scala - 这是使用什么 scala 语言功能?它似乎从 JsObject 中提取值并转换它?
- mysql - 如何在 mysql 图表视图中创建检查约束?
- iis - 无法从在 IIS 服务上运行的应用程序连接到 SQL localDB 实例
- javascript - Vanilla JS Web Components 在第二次调用函数时出现意外的未定义属性
- java - Spring REST URI 存在检查
- javascript - 将图像加载到 HTML5 画布上
- java - android.view.InflateException: Binary XML file line #38: Binary XML file line #38: Error inflating class fragment
- python - 如何在 python pptx 中更改 TickLabelSpacing