[Zope] tal loop to render table
    Alexis Roda 
    alexis.roda.villalonga at gmail.com
       
    Wed Nov 29 14:44:49 EST 2006
    
    
  
En/na Dennis Schulz ha escrit:
> I would like to build a tal loop that renders a list of elements 
> (widgets in my case) in a table.
> (for example I have a list of 9 items, then it renders a table: five 
> rows with 2,2,2,2,1 items)
> the table has 2 columns, so i would need to open and close the table row 
> every second item.
> I tried to check with a condition if the row is odd or even, but 
> unopened and unclosed tags are not valid.
> 
> Is there any possibiliy to do this with tal?
Tricky and not tested from restricted code ... but you're asking for a 
tal solution:
<table tal:define="l    python:the_list + [ None ];
                    rows python:zip(l[0::2], l[1::2]);
                   ">
<tr tal:repeat="row rows">
  <td tal:repeat="cell row">
  </td>
</tr>
</table>
An example:
 >>> the_list = [1,2,3,4,5,6,7,8,9]
 >>> l = the_list + [ None ]
 >>> zip(l[0::2], l[1::2])
[(1, 2), (3, 4), (5, 6), (7, 8), (9, None)]
 >>> the_list = [1,2,3,4,5,6,7,8,9,10]
 >>> l = the_list + [ None ]
 >>> zip(l[0::2], l[1::2])
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
Instead of the tricky use of zip and extended slices write a more 
generic python script :
convert_list_to_array(the_list, column_count=2)
HTH
    
    
More information about the Zope
mailing list