您可能知道,get_annotated_list()
将返回一个元组数组,格式为(node, info)
. 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 模板,在那里它们被视为列表。