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 viewdom:

def main() -> str:
    """Main entry point."""
    message = "Hello"
    names = ["World", "Universe"]
    result = render(
        html(
            """
            <ul title="{message}">
                {[
                    html('<li>{name}</li>')
                    for name in names
                ]}
            </ul>
            """
        )
    )
    return result

Rendered Looping#

You could also move the generation of the items out of the “parent” template, then use that VDOM result in the next template:

def main() -> str:
    """Main entry point."""
    message = "Hello"
    names = ["World", "Universe"]
    items = [html("<li>{label}</li>") for label in names]
    result = render(
        html(
            """
            <ul title="{message}">
              {items}
            </ul>
            """
        )
    )
    return result