在后端,我从一个API获取一个文件夹结构。我递归地遍历这个结构以获取所有文件夹。然后这些都存储在一个“平面”有序字典中。每个文件夹都与一些属性一起存储,以定义结构、父文件夹的id、子文件夹的数量以及它本身是否是子节点。在
现在从这个有序的dict开始,我试图用Genshi创建一个很好的层次结构视图,但是到目前为止,我得到的最远的是下面的模板。这只会产生两个级别,根级别和一个级别以下。任何更深的文件夹都将显示在第二层。在
我正在尝试这样做,而不必求助于在数据的初始解析上做大量的关系检查,以获得文件夹所处的级别等等。有人有什么好主意吗?在
<body>
<div class="main_content">
<h1>Catalogue Tree</h1>
<ul>
<li py:for="nodeId, nodeProps in nodes.iteritems()">
<a py:if="nodeProps['SubNode'] == False" href="${tg.url('/node/' + nodeId)}">${nodeProps['Name']}</a>
<py:if test="nodeProps['SubNode'] == True">
<ul>
<a href="${tg.url('/node/' + nodeId)}">${nodeProps['Name']}</a>
</ul>
</py:if>
</li>
</ul>
</div>
</body>
正如我所说,您可以使用使用
py:def
指令创建的递归宏来解决问题。下面是我尝试的解决方案(注意,我的系统上没有安装genshi
,因此这是未经测试的):模板的这一部分需要传递两个参数,一个是包含所有节点的
nodes
字典,另一个是包含所有顶层节点id的root_nodes
序列。它创建的结构与您链接到的代码有点不同,因为它包含父节点的<li>
标记中的子节点列表。我不确定这对渲染是否有任何影响,但我觉得这样做最正确。在相关问题 更多 >
编程相关推荐