Oops my copy and paste wasn't perfect,  the function I posted should end 
with:  

 
   return output




On Tuesday, July 10, 2012 5:15:12 PM UTC+1, villas wrote:
>
> Hi Alan
>
> Here is some test code using recursion I used to create a menu in the 
> past.  I used it in a module but you can test it easily for yourself at the 
> commandline as I will explain.
>
> def test_html_nodes(nodes,link_to_function='area'):
>     if not nodes:
>         nodes = [ 
>         { 'id':1, 'parent_id':0, 'name':'a' },
>         { 'id':2, 'parent_id':0, 'name':'b' },
>         { 'id':3, 'parent_id':2, 'name':'c' },
>         { 'id':4, 'parent_id':2, 'name':'d' },
>         { 'id':5, 'parent_id':4, 'name':'e' },
>         { 'id':6, 'parent_id':0, 'name':'f' }
>         ]
>     global output
>     output = ''
>     global count
>     count = 0
>     def build_node(node):
>         global output
>         #output += '<li><a>'+node['name']+'</a>'
>         li_id = ' id="%s"' % node['id']
>         output += '<li%s>'%li_id + \
>                   str(A(node['name'],_href=URL(link_to_function,args=[node
> ['id']])))
>         build_nodes(node['id'])
>         output += '</li>'
>     
>     def build_nodes(node_parent_id):
>         global output
>         global count
>         count += 1
>         subnodes = [node for node in nodes if node['parent_id'] 
> ==node_parent_id
> ]
>         if len(subnodes) > 0 : 
>             cl = ' class="sf-menu sf-vertical sf-js-enabled sf-shadow"' 
> ifcount 
> ==1 else ''
>             output += '<ul%s>' % cl
>             [build_node(subnode) for subnode in subnodes]
>             output += '</ul>'
>     
>     build_nodes(0) # Pass in parent id to start as top level nodes
>
> Copy and paste that into a python commandline and then test with:  
> test_html_nodes(None)
>
> You should see:
>
> <ul class="sf-menu sf-vertical sf-js-enabled sf-shadow">
>   <li id="1"><a href="/carhire/default/area/1">a</a></li>
>   <li id="2"><a href="/carhire/default/area/2">b</a>
>     <ul>
>       <li id="3"><a href="/carhire/default/area/3">c</a></li>
>       <li id="4"><a href="/carhire/default/area/4">d</a>
>           <ul>
>             <li id="5"><a href="/carhire/default/area/5">e</a></li>
>           </ul>
>       </li>
>     </ul>
>   </li>
>   <li id="6"><a href="/carhire/default/area/6">f</a></li>
> </ul>
>
>
>
>     
>     return output
>

Reply via email to