在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中创建点类

在 Python 中创建一个新字典

在 Anaconda 中创建 python 3.3 环境

如何在 Python 中创建 GUID/UUID

是否可以在 Python 中创建抽象类?

python 在python中创建计数器