使用django_树板创建数据树(包括node.id)
我正在尝试显示树板模型中的目录树。treebeard教程中建议的带注释的列表方法工作得很好,但我希望在数据树中包含id信息 dump_bulk()包含了我需要的所有信息,但作为python和django的新手,我正在努力寻找一种方法来提取信息并在模板中显示它 我考虑过切换到javascript,并解析json字符串,但javascript不喜欢字符串值前面的u前缀。有没有避免u前缀的简单方法 我还考虑过基于get_annotated_list()编写一个函数,该函数包含id信息。我假设应该可以重载get_annotated_列表,以便包含id信息,但我也不太确定如何解决这个问题使用django_树板创建数据树(包括node.id),django,tree,django-treebeard,Django,Tree,Django Treebeard,我正在尝试显示树板模型中的目录树。treebeard教程中建议的带注释的列表方法工作得很好,但我希望在数据树中包含id信息 dump_bulk()包含了我需要的所有信息,但作为python和django的新手,我正在努力寻找一种方法来提取信息并在模板中显示它 我考虑过切换到javascript,并解析json字符串,但javascript不喜欢字符串值前面的u前缀。有没有避免u前缀的简单方法 我还考虑过基于get_annotated_list()编写一个函数,该函数包含id信息。我假设应该可以重
任何能帮助我沿着学习曲线前进的建议都将不胜感激。您可能知道,
get\u annotated\u list()
将以(节点,信息)
的形式返回元组数组info
只是一个字典,因此您可以在列表上迭代,并添加您喜欢的任何其他密钥对。例如:
for node, info in my_annotated_list:
info['foo'] = node.id
把这个传给你的模板,你会没事的
您也可以使用发电机。这是我现在正在做的一个项目:
def annotated_menu_items(initial_header, menu_items):
headings = [initial_header]
for item, info in menu_items:
yield item, info, item.is_leaf(), headings[-1:][0]
if info['open']:
headings.append(item.title)
for close in info['close']:
headings.pop()
在这里,我添加了一个额外的信息,即所讨论的节点是否是一个叶子,并将标题从最近打开的节点推到一个堆栈上,这样我就可以从树的更深层访问它
您说您是Python新手,所以您可能希望了解生成器。它们可以让您惰性地具体化(可能无限)列表的元素。为了使用它,您可以调用构造生成器的函数,然后可以将生成器对象视为iterable
。例如:
my_fancy_menus = annotated_menu_items("My Menu", my_annotated_list)
for menu in my_fancy_menus:
do_stuff(menu)
您还可以将生成器传递给Django模板,在那里它们被视为列表