我正在使用嵌套集层次结构或修改的预序树遍历 (MPTT) 算法,如此处所述,我很难理解如何将深度和类别名称转换为 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 代码翻译成可以在 Chameleon 模板中使用的东西,使用tal
.
我见过的最接近的答案是使用 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。如果从上面的模板代码中看不出来,我对它很陌生,所以任何帮助都将不胜感激!谢谢。