我正在使用嵌套集层次结构或修改过的预订树遍历(MPTT)算法,如here所述,我很难理解如何翻译深度和类别将名称命名为Chameleon模板,以使用<ul>
和<li>
显示嵌套树。
我有dict
,其中包含所有类别的深度和类别名称信息:
[{'depth': 1L, 'name': 'CategoryA'}, {'depth': 2L, 'name': 'CategoryB', ...]
调整此source,在Python中打印此信息的方法是:
category_ul = ""
current_depth = -1
category_list.pop(0)
while category_list:
current_node = category_list.pop(0)
category_name = current_node['name']
category_depth = current_node['depth']
if category_depth > current_depth:
category_ul += "<ul>\n"
if category_depth < current_depth:
category_ul += "</ul>\n" * (current_depth - category_depth)
category_ul += "<li>%s</li>\n" % str(category_name)
current_depth = category_depth
if not category_list:
category_ul += "</ul>\n" * (current_depth + 1)
我想要做的是将此Python代码转换为可以使用tal
在Chameleon模板中使用的内容。
我看到的最接近的答案是Rendering nested elements with an arbitrary depth using Chameleon ZPT,但它需要每个节点的子节点,这似乎不是正确的解决方案。
所以,我的问题是:如何在Chameleon模板中实现上面的Python代码?我非常感谢能得到的任何帮助。到目前为止,我已经尝试过:
<tal:block tal:define="current_depth -1">
<tal:block tal:repeat="category categories_list">
<ul tal:condition="python:category['depth'] > current_depth">${category['name']}</ul>
<tal:block tal:define:"current_depth category['depth']"></tal:block>
<span>current_depth: ${current_depth}</span>
</tal:block>
</tal:block>
但是,current_depth
始终定义为-1。如果从上面的模板代码中看不出来,我很陌生,所以任何帮助都将不胜感激!感谢。