[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