针对不同django应用程序

时间:2017-02-16 15:27:40

标签: django django-cms

也许我只是瞎了,但我找不到能帮助我解决这个问题的任何事情。我有一个Django项目,我正在使用Django CMS,例如在所有网站上显示菜单。现在我想添加一个额外的Django子应用程序,它应该显示一个完全不同的菜单。有没有首选的方法呢?

现在我到了以下解决方案。我正在使用两个cms_menus.py文件,一个用于定义用于所有迄今为止网站的NavigationNodes,另一个用于定义新子应用的NavigationNodes。因此每个NavigationNode都有一个命名空间(开箱即用),它基本上表示应该显示的位置。我得到一个Modifier,如果设置了NavigationNodes,则删除所有具有不同命名空间的class NamespaceModifier(Modifier): def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb): if post_cut: return nodes if namespace is not None: # only return nodes from given namespace return [node for node in nodes if node.namespace == namespace] return nodes menu_pool.register_modifier(NamespaceModifier)

show_menu

这样做的动机是,namespace模板标记接受namespace参数,docs中指定:“第五个参数{% show_menu 0 100 100 100 "website/nav.html" "TestMenu" %}指定命名空间菜单。如果[sic] empty将使用所有名称空间。“ (虽然应该注意它需要在模板名称之后添加,例如TestMenu,其中Modifier是命名空间。) 自定义show_menu是必要的,因为namespace除了设置NavigationNodes之外似乎没有对namespace做任何事情。我有点期待开箱即用只显示给定attr的{​​{1}},但显然我错了......

是否有更好的解决方案(我认为很常见)要求使用不同的菜单?显然,在上面的解决方案中,如果无法将NavigationNodes映射到Node-namespace,我也可以使用$。{/ p>

0 个答案:

没有答案