Nikko Wolf schrieb:
Ian Bicking wrote:

I'm surprised this has never come up for me before, but now I want to render a recursive data structure and I'm at a loss how I might do that in ZPT. Or, what the best workaround would be. E.g.:

['a', 'b', ['c', ['d', 'e']]]

Becomes:

<ul>
 <li>a</li>
 <li>b</li>
 <ul>
  <li>c</li>
  <ul>
   <li>d</li>
   <li>e</li>
  </ul>
 </ul>
</ul>

The code above is not valid HTML[1]. This is one way how to do it:

<ul tal:define="nodes python:['a', 'b', ['c', ['d', 'e']]]">
  <li metal:define-macro="item"
      tal:repeat="node nodes">
    <span tal:define="global is_list python:same_type([], node);
                      content python:is_list and 'list:' or node"
          tal:replace="content"/>
    <ul tal:condition="is_list"
        tal:define="nodes node">
      <li metal:use-macro="template/macros/item"/>
    </ul>
  </li>
</ul>

I guess the template could call itself repeatedly. Which means the list can't be embedded in any other markup.

To embed it in another template simply call it:

<ul tal:replace="structure here/list"/>

(Or define a macro and use that).

Even better if the logic is in a script that renders the template, I think.

Tonico

[1] <ul> can not have <ul> as parent
http://zvon.org/xxl/xhtmlReference/Output/Strict/el_ul.html

_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to