首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用genshi.builder以编程方式构建HTML文档?

如何使用genshi.builder以编程方式构建HTML文档?
EN

Stack Overflow用户
提问于 2008-09-21 23:37:58
回答 2查看 1.6K关注 0票数 5

我最近发现了genshi.builder模块。这让我想起了Divmod Nevow的斯坦模块。如何使用genshi.builder.tag构建具有特定文档类型的HTML?或者这是件好事吗?如果没有,正确的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-22 02:12:07

仅仅使用genshi.builder.tag构建整个页面是不可能的--您需要对结果流执行一些操作才能插入doctype。此外,由此产生的代码看起来很可怕。使用Genshi的推荐方法是使用一个单独的模板文件,从它生成一个流,然后将该流呈现为您想要的输出类型。

当您需要从genshi.builder.tag内部生成简单的标记时,例如在构建表单或对输出进行某种逻辑上的修改时,是非常有用的。

见文件:

  • 创建和使用模板
  • 基于XML的模板语言
  • API文档

如果您真的希望只使用builder.tag生成完整的文档,那么这段(完全未经测试的)代码可能是一个很好的起点:

代码语言:javascript
复制
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')

生成的页面中将没有空白--它看起来很正常,但是您将很难阅读源代码,因为它将完全放在一行上。实现适当的过滤器添加空白是留给读者的练习。

票数 6
EN

Stack Overflow用户

发布于 2008-09-22 00:29:34

Genshi.builder用于“以编程方式生成标记流”1。我认为它的目的是作为模板语言的后端。您可能正在寻找生成整个页面的模板语言。

但是,您可以执行以下操作:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
[1] genshi.builder.__doc__
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/112564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档