Skip to main content

简单、优雅的 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 &rarr; text', escape=False)
>>> p += ' ... augmented'
>>> h.p
>>> print h
<p>hello, world!<br>more &rarr; 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 &gt; 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=FalseTrue传递给标签(或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

可能意味着您正在尝试使用printstr()(或%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>

名称难读的标签

如果您的标签名称不是有效的 Python 标识符名称,或者它被称为“text”或“raw_text”,您可以稍微手动添加标签:

>>> from html import XML
>>> h = XML('xml')
>>> h += XML('some-tag', 'some text')
>>> h += XML('text', 'some text')
>>> print h
<xml>
<some-tag>some text</some-tag>
<text>some text</text>
</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 提供。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

html-1.16.tar.gz (7.6 kB 查看哈希)

已上传 source