在 python 中创建 HTML
Posted
技术标签:
【中文标题】在 python 中创建 HTML【英文标题】:Creating HTML in python 【发布时间】:2011-01-19 01:25:39 【问题描述】:我正在寻找一种在 python 中动态创建 html 文件的方法。我正在编写一个画廊脚本,它遍历目录,收集文件元数据。然后我打算使用这些数据自动创建一个基于 html 的图片库。很简单的东西,只是一张图片表。
我真的不认为手动写入文件是最好的方法,而且代码可能很长。那么有没有更好的方法来做到这一点,可能是 html 特定的?
【问题讨论】:
【参考方案1】:使用模板引擎,例如 Genshi 或 Jinja2。
【讨论】:
【参考方案2】:我想,如果我理解正确的话,你可以看到here, "Templating in Python"。
【讨论】:
【参考方案3】:模板,正如其他答案中所建议的,可能是最好的答案(我写了一个早期的、古怪的模板模块,名为yaptu,但其他答案中建议的现代成熟的模板可能会让你更快乐;-)。
然而,虽然我上次使用它已经很长时间了,但我仍然怀念Quixote 方法,它大致是一种“反向模板”(在 Python 中嵌入 HTML 生成,而不是像普通模板那样反之亦然)。也许你应该看看,看看你是否更喜欢它;-)。
【讨论】:
我点击了一下,似乎 Quixote 还在。例如按钮生成器的描述在这里:quixote.ca/doc/widgets.txt . 总而言之,您似乎可以将 Dominate 库和 Quixote 放在同一个通用类别中。但是 Quixote 似乎也做了很多其他的事情,服务器相关的事情。我喜欢你的术语“反向模板” - 我将开始使用它来描述一般技术!【参考方案4】:Dominate 是一个 Python 库,用于直接在代码中创建 HTML 文档和片段,而无需使用模板。您可以使用以下内容创建一个简单的图片库:
import glob
from dominate import document
from dominate.tags import *
photos = glob.glob('photos/*.jpg')
with document(title='Photos') as doc:
h1('Photos')
for path in photos:
div(img(src=path), _class='photo')
with open('gallery.html', 'w') as f:
f.write(doc.render())
输出:
<!DOCTYPE html>
<html>
<head>
<title>Photos</title>
</head>
<body>
<h1>Photos</h1>
<div class="photo">
<img src="photos/IMG_5115.jpg">
</div>
<div class="photo">
<img src="photos/IMG_5117.jpg">
</div>
</body>
</html>
免责声明:我是主宰的作者
【讨论】:
自切片面包以来最好的东西。 20 年来我一直在尝试相同的想法,在 C、Lisp 和 IIRC (颤抖) php 中起步错误,但我的半生不熟的解决方案总是比 PHP 更痛苦只需在代码 (PHP) 或print
-ing HTML 之间添加 HTML。 Dominate 库只为我点击。对我而言,Dominate 感觉非常 lisp-y,因为您总是听说 Lisp 非常适合将 语言本身 用作领域特定语言。好吧,事实证明 Python 也非常适合这个!
同意!这真是太棒了【参考方案5】:
Python 是一种包含电池的语言。那么为什么不使用xml.dom.minidom
呢?
from typing import List
from xml.dom.minidom import getDOMImplementation, Document
def getDOM() -> Document:
impl = getDOMImplementation()
dt = impl.createDocumentType(
"html",
"-//W3C//DTD XHTML 1.0 Strict//EN",
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",
)
return impl.createDocument("http://www.w3.org/1999/xhtml", "html", dt)
def ul(items: List[str]) -> str:
dom = getDOM()
html = dom.documentElement
ul = dom.createElement("ul")
for item in items:
li = dom.createElement("li")
li.appendChild(dom.createTextNode(item))
ul.appendChild(li)
html.appendChild(ul)
return dom.toxml()
if __name__ == "__main__":
print(ul(["first item", "second item", "third item"]))
输出:
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html>
<ul>
<li>first item</li>
<li>second item</li>
<li>third item</li>
</ul>
</html>
界面看起来不像 pythonic,但如果您是一名前端开发人员并使用过 javascript DOM 操作,它会更符合您的想法,是的,它可以让您免于添加不必要的依赖项。
【讨论】:
以上是关于在 python 中创建 HTML的主要内容,如果未能解决你的问题,请参考以下文章