2008-09-21 45 views

回答

4

这是不可能只使用genshi.builder.tag构建整个页面 - 你需要执行对产生的流进行一些手术以插入文档类型。此外,由此产生的代码看起来很可怕。推荐使用Genshi的方法是使用单独的模板文件,根据它生成流,然后将该流渲染为所需的输出类型。

genshi.builder.tag主要用于需要从Python内部生成简单标记的情况,比如当您构建表单或对输出进行某种逻辑重大修改时。

见文档:

如果你真的想生成只使用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') 

生成的页面将不会有空白 - 看起来很正常,但您将很难阅读源代码,因为它完全位于同一行。实现合适的过滤器来添加空格作为练习留给读者。

+0

这是有道理的。听起来像你可能用来建立一个HTML片段加载到页面使用AJAX或东西? – 2008-09-22 02:22:11

2

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') 

见其他DOCTYPES这里:http://genshi.edgewall.org/wiki/ApiDocs/genshi.output#genshi.output:DocType

[1] genshi.builder.__doc__ 
+0

有没有办法使用genshi构建html文档?我正在寻找类似斯坦的东西。如果这不适合使用genshi,那很好,但我想知道是否是这种情况。 – 2008-09-22 01:21:42

相关问题