1

我正在使用嵌套集层次结构或修改的预序树遍历 (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。如果从上面的模板代码中看不出来,我对它很陌生,所以任何帮助都将不胜感激!谢谢。

4

0 回答 0