0

バックエンドで、API からフォルダー構造を取得しています。この構造を再帰的に反復処理して、すべてのフォルダーを取得します。これらはすべて「フラットな」順序付き辞書に格納されます。各フォルダーには、構造、親フォルダーの ID、サブフォルダーの量、およびそれ自体がサブノードであるかどうかを定義するためのいくつかのプロパティが格納されます。

この順序付けられた dict から、Genshi を使用して素敵な階層ビューを作成しようとしていますが、これまでに得た最も遠いものは以下のテンプレートです。これにより、ルート レベルと 1 つ下のレベルの 2 つのレベルのみが作成されます。さらに深いフォルダは、第 2 レベルに表示されます。

フォルダーのレベルなどを取得するために、データの最初の解析で多くの関係チェックを行うことに頼ることなく、これを実行しようとしています。誰か賢いアイデアを持っている人はいますか?

<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>
4

1 に答える 1

0

私がコメントしたように、py:defディレクティブで作成された再帰マクロで問題を解決できます。これが私の解決策の試みです(注、genshiシステムにインストールしていないため、これはテストされていません):

<ul py:def="display_nodes(node_ids)">
    <li py:for="node_id in node_ids">
        <a href="${tg.url('/node/' + node_id)}">${nodes[node_id]['Name']}</a>
        <py:if test="nodes[node_id]['SubNodes']">
             ${display_nodes(nodes[node_id]['SubNodes'])}
        </py:if>
    </li>
</ul>
${display_nodes(root_nodes)}

nodesテンプレートのこの部分では、すべてのノードを含むディクショナリと、root_nodesすべての最上位ノードの ID を含むシーケンスの 2 つのパラメータが渡されることを想定しています。<li>これが作成する構造は、リンク先のコードとは少し異なります。親のタグに子ノードのリストが含まれているからです。それがレンダリングに違いをもたらすかどうかはわかりませんが、そのようにするのが最も正しいように思えました。

于 2014-05-19T19:50:54.567 に答える