如何使用TAL和嵌套集列表(修改的预订树遍历)在变色龙模板中创建树

时间:2014-06-30 03:23:21

标签: python tree mptt chameleon

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

0 个答案:

没有答案