def tag(name, *content, cls=None, **attrs): """生成一个或多个HTML标签""" if cls is not None: attrs['class'] = cls if attrs: attr_str = ''.join(' %s="%s"' % (attr, value) for attr, value in sorted(attrs.items())) else: attr_str = '' if content: return '\n'.join('<%s%s>%s</%s>' % (name, attr_str, c, name) for c in content) else: return '<%s%s />' % (name, attr_str)
tag('br') ➊ '<br />' tag('p', 'hello') ➋ '<p>hello</p>' print(tag('p', 'hello', 'world')) <p>hello</p> <p>world</p> tag('p', 'hello', id=33) ➌ '<p id="33">hello</p>' print(tag('p', 'hello', 'world', cls='sidebar')) <p class="sidebar">hello</p> <p class="sidebar">world</p> tag(content='testing', name="img") ➎ '<img content="testing" />' my_tag = {'name': 'img', 'title': 'Sunset Boulevard', ... 'src': 'sunset.jpg', 'cls': 'framed'} tag(**my_tag) ➏ '<img class="framed" src="sunset.jpg" title="Sunset Boulevard" />'