""" # tag::TAG_DEMO[] >>> tag('br') # <1> '
' >>> tag('p', 'hello') # <2> '

hello

' >>> print(tag('p', 'hello', 'world'))

hello

world

>>> tag('p', 'hello', id=33) # <3> '

hello

' >>> print(tag('p', 'hello', 'world', class_='sidebar')) # <4> >>> tag(content='testing', name="img") # <5> '' >>> my_tag = {'name': 'img', 'title': 'Sunset Boulevard', ... 'src': 'sunset.jpg', 'class': 'framed'} >>> tag(**my_tag) # <6> '' # end::TAG_DEMO[] """ # tag::TAG_FUNC[] def tag(name, *content, class_=None, **attrs): """Generate one or more HTML tags""" if class_ is not None: attrs['class'] = class_ attr_pairs = (f' {attr}="{value}"' for attr, value in sorted(attrs.items())) attr_str = ''.join(attr_pairs) if content: elements = (f'<{name}{attr_str}>{c}' for c in content) return '\n'.join(elements) else: return f'<{name}{attr_str} />' # end::TAG_FUNC[]