Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用django_树板创建数据树(包括node.id)_Django_Tree_Django Treebeard - Fatal编程技术网

使用django_树板创建数据树(包括node.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信息。我假设应该可以重

我正在尝试显示树板模型中的目录树。treebeard教程中建议的带注释的列表方法工作得很好,但我希望在数据树中包含id信息

dump_bulk()包含了我需要的所有信息,但作为python和django的新手,我正在努力寻找一种方法来提取信息并在模板中显示它

我考虑过切换到javascript,并解析json字符串,但javascript不喜欢字符串值前面的u前缀。有没有避免u前缀的简单方法

我还考虑过基于get_annotated_list()编写一个函数,该函数包含id信息。我假设应该可以重载get_annotated_列表,以便包含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模板,在那里它们被视为列表