This macro automatically generates an HTML unordered list from a Python list. Nested lists are also supported.
macro ( 'AutoList', lambda data, level=0:
data and (
T.ul ( class_='autolist level-%s' % level ) [
[ T.li [
[ lambda _i, _j: _i, AutoList ]
[ isinstance ( _i, list ) ]( _i, level + 1 )
]
for _i in data ]
]
) or ''
)
then given the following data:
sublist1 = [ "List 1:%s" % _i for _i in range ( 3 ) ]
sublist2 = [ "List 2:%s" % _i for _i in range ( 3, 6 ) ]
sublist3 = [ "List 3:%s" % _i for _i in range ( 6, 9 ) ]
sublist3.append ( sublist2 )
data = [
'Item A', 'Item B', 'Item C',
sublist1,
'Item D', 'Item E', 'Item F',
sublist3,
]
and the following template:
html [
head [ title [ 'AutoList Demo' ] ],
body [ AutoList ( data ) ]
]
you'd get the following:
<html>
<head><title>AutoList Demo</title></head>
<body>
<ul class="autolist level-0">
<li>Item A</li>
<li>Item B</li>
<li>Item C</li>
<li>
<ul class="autolist level-1">
<li>List 1:0</li>
<li>List 1:1</li>
<li>List 1:2</li>
</ul>
</li>
<li>Item D</li>
<li>Item E</li>
<li>Item F</li>
<li>
<ul class="autolist level-1">
<li>List 3:6</li>
<li>List 3:7</li>
<li>List 3:8</li>
<li>
<ul class="autolist level-2">
<li>List 2:3</li>
<li>List 2:4</li>
<li>List 2:5</li>
</ul>
</li>
</ul>
</li>
</ul>
</body>
</html>