在我的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
中列出的应用顺序创建菜单,但是将我的应用移到最底端也不会改变顺序。
如评论中所建议,Modifier
不仅可以更改单个条目的属性,还可以添加,删除或重新排序条目。
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
中,我收集了自己的应用添加的所有条目,并将它们放在列表的末尾。