简单、优雅的 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>
统一码
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 源代码,那么您很可能会遇到以下错误之一:
- Unicode解码错误
可能意味着您在 HTML 中添加了非 unicode 字符串。
- UnicodeEncodeError
可能意味着您正在尝试使用print 或str()(或%s)获取结果 HTML。
一代如何运作
HTML 文档是在HTML实例被“字符串化”时生成的。这可以通过在其上调用str()或仅打印它来完成。它也可以作为“可迭代内容”直接从 WSGI 应用程序函数返回。
您还可以通过将其字符串化来随时呈现任何标签或子标签。
没有内容的标签(文本或子标签)将没有结束标签。没有标签的“特殊列表”必须总是有结束标签,所以如果你需要强制结束标签,你需要提供一些内容,即使它只是一个空格字符。
渲染不会影响 HTML 文档的状态,因此您可以在对 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 再次支持plain ol' 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 新增特例类/类属性
1.1 增加转义控制
1.0 是最初的版本
我很想知道这个模块是否有用 - 如果你使用它,请在https://www.ohloh.net/p/pyhtml上注明
此代码版权所有 2009-2011 eKit.com Inc ( http://www.ekit.com/ ) 请参阅源文件末尾的使用许可。XHTML 支持由 Michael Haubenwallner 提供。