Looping¶
It’s common in templating to format a list of items, for example, a <ul>
list.
Many Python template languages invent a Python-like grammar to do for
loops
and the like.
Simple Looping¶
You know what’s more Python-like? Python.
f-strings can do looping in a Python expression using list comprehensions and so
can tdom
:
message = "Hello"
names = ["World", "Universe"]
result = html(
t"""
<ul title="{message}">
{[t'<li>{name}</li>' for name in names]}
</ul>
"""
)
assert str(result) == """
<ul title="Hello">
<li>World</li><li>Universe</li>
</ul>
"""
Rendered Looping¶
You could also move the generation of the items out of the “parent” template,
then use that Node
result in the next template:
message = "Hello"
names = ["World", "Universe"]
items = [html(t"<li>{label}</li>") for label in names]
result = html(t"<ul title={message}>{items}</ul>")
assert str(result) == '<ul title="Hello"><li>World</li><li>Universe</li></ul>'