我最近发现了 genshi.builder 模块。它让我想起了 Divmod Nevow 的 Stan 模块。如何使用 genshi.builder.tag 构建具有特定文档类型的 HTML 文档?或者这甚至是一件好事吗?如果没有,正确的方法是什么?
Jeremy Cantrell
问问题
1561 次
2 回答
6
仅使用构建整个页面是不可能的genshi.builder.tag
——您需要对结果流执行一些手术以插入文档类型。此外,生成的代码看起来很可怕。使用 Genshi 的推荐方法是使用单独的模板文件,从中生成一个流,然后将该流渲染为您想要的输出类型。
genshi.builder.tag
当您需要从 Python 中生成简单标记时,例如在构建表单或对输出进行某种逻辑繁重的修改时,它最有用。
请参阅以下文档:
如果你真的想使用 only 生成一个完整的文档builder.tag
,这个(完全未经测试的)代码可能是一个很好的起点:
from itertools import chain
from genshi.core import DOCTYPE, Stream
from genshi.output import DocType
from genshi.builder import tag as t
# Build the page using `genshi.builder.tag`
page = t.html (t.head (t.title ("Hello world!")), t.body (t.div ("Body text")))
# Convert the page element into a stream
stream = page.generate ()
# Chain the page stream with a stream containing only an HTML4 doctype declaration
stream = Stream (chain ([(DOCTYPE, DocType.get ('html4'), None)], stream))
# Convert the stream to text using the "html" renderer (could also be xml, xhtml, text, etc)
text = stream.render ('html')
结果页面中没有空格——它看起来很正常,但是您将很难阅读源代码,因为它将完全在一行上。实施适当的过滤器以添加空格作为练习留给读者。
于 2008-09-22T02:12:07.880 回答
3
Genshi.builder 用于“以编程方式生成标记流”[1]。我相信它的目的是作为模板语言的后端。您可能正在寻找用于生成整个页面的模板语言。
但是,您可以执行以下操作:
>>> import genshi.output
>>> genshi.output.DocType('html')
('html', '-//W3C//DTD HTML 4.01//EN', 'http://www.w3.org/TR/html4/strict.dtd')
在此处查看其他文档类型: http ://genshi.edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType
[1] genshi.builder.__doc__
于 2008-09-22T00:29:34.727 回答