简单、优雅的HTML、XHTML和XML生成
项目描述
简单、优雅的HTML、XHTML和XML生成。
构建HTML
要构建HTML,请从html.HTML()的实例开始。通过访问该对象的属性来添加标签。例如
>>> from html import HTML >>> h = HTML() >>> h.p('Hello, world!') >>> print h # or print(h) in python 3+ <p>Hello, world!</p>
在创建HTML实例时,您可以提供标签名称和一些文本内容
>>> h = HTML('html', 'text') >>> print h <html>text</html>
您还可以稍后使用标签的.text()方法或使用增强型附加+=来追加文本内容。除非传递escape=False,否则文本中的任何HTML特定字符(<>&")都将根据需要转义以实现HTML安全。以下每个示例都使用新的HTML实例
>>> p = h.p('hello world!\n') >>> p.br >>> p.text('more → text', escape=False) >>> p += ' ... augmented' >>> h.p >>> print h <p>hello, world!<br>more → text ... augmented</p> <p>
请注意,顶级HTML对象默认在标签之间添加换行符。最后,在上面的例子中,您会看到一个空的段落标签 - 没有内容的标签不会获得关闭标签。
如果标签应该有子标签,您有两个选择。您可以直接在标签上添加子标签
>>> l = h.ol >>> l.li('item 1') >>> l.li.b('item 2 > 1') >>> print h <ol> <li>item 1</li> <li><b>item 2 > 1</b></li> </ol>
请注意,默认情况下,列表(和表格)的行为是在子标签之间添加换行符以生成更好的输出。您也可以在示例中看到l.li.b中标签的链式调用。
标签属性也可以作为参数传递
>>> t = h.table(border='1') >>> for i in range(2): >>> r = t.tr >>> r.td('column 1') >>> r.td('column 2') >>> print t <table border="1"> <tr><td>column 1</td><td>column 2</td></tr> <tr><td>column 1</td><td>column 2</td></tr> </table>
以下是对上述方法的变体,即使用标签作为上下文变量。以下与第一个列表构建功能相同,但语法略有不同,强调了HTML结构
>>> with h.ol as l: ... l.li('item 1') ... l.li.b('item 2 > 1')
您可以通过传递 newlines=False 或 True 到标签(或 HTML 实例)中在创建时关闭/开启添加换行符
>>> l = h.ol(newlines=False) >>> l.li('item 1') >>> l.li('item 2') >>> print h <ol><li>item 1</li><li>item 2</li></ol>
由于我们不能使用 class 作为关键字,库识别 klass 作为替代
>>> print h.p(content, klass="styled") <p class="styled">content</p>
Unicode
HTML 可以与常规字符串 或 Unicode字符串一起工作,但不能同时使用两者。
通过在 HTML 实例上调用 unicode() 获取最终的 Unicode 字符串
>>> h = HTML() >>> h.p(u'Some Euro: €1.14') >>> unicode(h) u'<p>Some Euro: €1.14</p>'
如果(在Python 2.x下)您添加了非Unicode字符串或试图通过 unicode() 之外的其他任何方式获取结果HTML源,那么您可能会遇到以下错误之一
- UnicodeDecodeError
可能意味着您已将非Unicode字符串添加到HTML中。
- UnicodeEncodeError
可能意味着您正在尝试使用 print 或 str()(或 %s)获取结果HTML。
生成方式
当 HTML 实例被“转换为字符串”时,将生成HTML文档。这可以通过对其调用 str() 或直接打印它来实现。它还可以直接从WSGI应用函数返回“可迭代内容”。
您还可以在任何时候通过将任何标签或子标签转换为字符串来渲染它们。
没有内容的标签(无论是文本还是子标签)将没有闭合标签。没有“特殊列表”的标签必须始终有闭合标签,所以如果需要强制闭合标签,您需要提供一些内容,即使它只是一个空格字符。
渲染不会影响HTML文档的状态,因此可以在字符串化后添加到或以其他方式操作HTML。
创建XHTML
要构建XHTML,从 html.XHTML() 实例开始,并像使用 HTML 实例一样使用它。现在将使用适当的XHTML最小化标签语法渲染空元素。例如
>>> from html import XHTML >>> h = XHTML() >>> h.p >>> h.br >>> print h <p></p> <br />
创建XML
对 html.XHTML() 实现的轻微修改使我们能够使用 html.XML() 生成任意XML。
>>> from html import XML >>> h = XML('xml') >>> h.p >>> h.br('hi there') >>> print h <xml> <p /> <br>hi there</br> </xml>
版本历史(简要)
1.16 检测并引发更有用的错误,当某些WSGI框架尝试调用HTML.read()时。还添加了使用 += 操作符添加新内容的能力。
1.15 修复Python 3兼容性(单元测试)
1.14 添加了对普通XML的支持
1.13 允许添加(X)HTML实例(标签)作为新文档内容
1.12 修复在生成Unicode输出时处理XHTML空标签的问题(感谢Carsten Eggers)
1.11 移除setuptools依赖
1.10 再次支持普通distutils
1.9 为Python 2.x添加了对Unicode的支持
1.8 添加了对Python 3的兼容性
1.7 添加了对Python 2.5的兼容性以及标签构造中的转义参数
1.6 添加了 .raw_text() 和 WSGI兼容性
1.5 添加了对XHTML的支持
1.3 添加了更多文档和测试
1.2 添加了特殊情况的klass / class属性
1.1 添加了转义控制
1.0 是初始发布
我很想知道这个模块是否有用 - 如果您使用它,请在 https://www.ohloh.net/p/pyhtml 上表明
本代码版权所有 2009-2011 eKit.com Inc (http://www.ekit.com/),请参阅源文件末尾的使用许可。XHTML支持由Michael Haubenwallner提供。
项目详情
html-1.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ebc768f23b54a71350d731a75f2ef3a4a4dbdad9ae68d58b527664b66088e456 |
|
MD5 | 39b9db7cdcc84607828be021172d441f |
|
BLAKE2b-256 | 4adf0e3d22d50ee43274eb5116f49972a164d853bb3ab305a69a0540b6292252 |