【发布时间】:2016-12-10 07:45:02
【问题描述】:
DjangoCMS 中的默认 NavigationNode 的节点为:
- 孩子们
- 标题
- get_menu_title
- get_attribute
- 等
在相同的上下文中,我想添加我的自定义节点,称为:category_name,它将返回字符串“某物”(仅用于测试目的)。
在official documentation 之后,没有找到任何可以帮助我解决问题的方法。在查找默认 NavigationNode 的声明时,出现如下代码:
从 menus.base 导入 NavigationNode
base.py 文件:
class NavigationNode(object):
def __init__(self, title, url, id, parent_id=None, parent_namespace=None,
attr=None, visible=True):
self.children = [] # do not touch
self.parent = None # do not touch, code depends on this
self.namespace = None # TODO: Assert why we need this and above
self.title = title
self.url = url
self.id = id
self.parent_id = parent_id
self.parent_namespace = parent_namespace
self.visible = visible
self.attr = attr or {} # To avoid declaring a dict in defaults...
def __repr__(self):
return "<Navigation Node: %s>" % smart_str(self.title)
def get_menu_title(self):
return self.title
def get_absolute_url(self):
return self.url
def get_attribute(self, name):
return self.attr.get(name, None)
def get_descendants(self):
return sum(([node] + node.get_descendants() for node in self.children), [])
def get_ancestors(self):
if getattr(self, 'parent', None):
return [self.parent] + self.parent.get_ancestors()
else:
return []
如果我在此处添加名为 category_name 的自定义节点,它将起作用。但是修改基础文件并不是一个聪明的解决方案。
所以我的问题是:
如何在 base.py 之外添加我的自定义节点? IE。如果我想添加 它在我的应用程序 models.py 文件中。这甚至可能吗?
【问题讨论】:
标签: python django django-cms