Python中的HTML生成

0 投票
4 回答
2523 浏览
提问于 2025-04-16 00:36

在Python中,快速创建一些简单的HTML有什么简单的方法吗?我找到的都是复杂的模板系统或者生成HTML的类,这些API看起来比我需要的要复杂得多。

我可以自己把字符串拼在一起,但我想可能有个库可以帮我节省一点时间。

补充一下——我决定仔细看看Jinja2这个模板系统。它看起来在未来某个时候可能会很有用,而且似乎没有我想象中那么难学。

4 个回答

1

看看这个叫做Markup的模块:http://markup.sourceforge.net/

补充一下:还有一个看起来很相似的模块:http://www.decalage.info/en/python/html

1

Python里的字符串模板(string.Template)可能正是你需要的,而且它是内置的功能。

http://docs.python.org/library/string.html#template-strings

我不太明白“看起来更复杂的API”是什么意思,能不能给点具体的解释或例子呢?

2

quixote 是一个有点老但依然很有趣的框架——它的主要特点是“把HTML嵌入到Python中”(而不是像大多数流行的模板系统那样,把Python嵌入到HTML中)。

这里有一个来自概述的简单例子:

def format_row [html] (head, value):
    "<tr valign=top align=left>\n"
    "  <th align=left>%s</th>\n" % head
    "  <td>%s</td>\n" % value
    "</tr>\n"

在标准的Python中,第一行字符串会被当作文档字符串,其他的会被忽略,而[html]部分会被视为语法错误。但在Quixote中,[html]标记这个函数是“PTL”(Python模板语言),而不是标准的Python,这种函数的文件扩展名是.ptl,不过它们仍然可以从Python中import,这些字符串会被输出。

我怀疑你会选择使用Quixote而不是现代的Python模板方法,但我觉得它的内容还是挺有意思的。

类似的还有nevow(不过它更侧重于生成XML,而不是HTML),特别是stan,它的经典例子是...:

>>> from nevow import flat, stan
>>> html = stan.Tag('html')
>>> p = stan.Tag('p')
>>> someStan = html[ p(style='font-family: Verdana;')[ "Hello, ", "world!" ] ]
>>> flat.flatten(someStan)
'<html><p style="font-family: Verdana;">Hello, world!</p></html>'

这有点“更酷”...因为你不需要担心正确关闭标签的问题;-)。

不过,最终在实际工作中,像jinja2mako这样的模板系统通常更受欢迎——主要的实际原因是它们在模板中更好地分离了展示逻辑(在模板中)和其他层(在标准Python代码中),相比于“把HTML/XML嵌入到Python中”的方法,我想这就是原因。

撰写回答