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
_______________________________________________
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 )