Hotmetal 项目教程
hotmetal A tiny HTML generator 项目地址: https://gitcode.com/gh_mirrors/ho/hotmetal
1. 项目介绍
Hotmetal 是一个小巧的 HTML 生成器,允许你直接从 Python 原始数据结构生成 HTML,而无需使用任何基于文本的模板语言。它是一个替代 Jinja、Django 模板等的工具。Hotmetal 的设计灵感来自 React、Mithril 等 JavaScript 库,同时也类似于 Hyperpython,但更加简单。
Hotmetal 的核心思想是保持与 HTML 规范尽可能接近,通过 Python 元组来表示 HTML 元素的树结构。每个元素由标签名、属性和子元素列表组成。
2. 项目快速启动
安装
你可以通过 PyPI 安装 Hotmetal:
pip install hotmetal
如果你使用的是 MicroPython,可以直接将 hotmetal/__init__.py
的内容复制到一个名为 hotmetal.py
的文件中。
基本使用
以下是一个简单的示例,展示如何使用 Hotmetal 生成一个 HTML 文档:
from hotmetal import render
# 定义一个 HTML 文档结构
document = (
"html",
{"lang": "en"},
[
("head", [], [("title", [], ["Sample page"])]),
(
"body",
[],
[
("h1", [], ["Sample page"]),
("p", [], ["This is a ", ("a", {"href": "demo.html"}, ["simple"]), " sample"]),
],
),
],
)
# 渲染 HTML
html_output = render(document, indent=2)
print(html_output)
输出结果:
<html lang="en">
<head>
<title>Sample page</title>
</head>
<body>
<h1>Sample page</h1>
<p>This is a <a href="demo.html">simple</a> sample</p>
</body>
</html>
3. 应用案例和最佳实践
组件化开发
Hotmetal 支持组件化开发,你可以编写返回元素节点的函数,并通过这些函数构建你的 Web 应用。以下是一个简单的菜单组件示例:
def menu_item(href, text):
return ("li", [], [("a", {"href": href}, [text])])
def menu(items):
return ("ul", [], [menu_item(href, text) for href, text in items])
menu_node = menu([
("/home/", "Home"),
("/blog/", "Blog"),
])
html_output = render(menu_node, indent=2)
print(html_output)
输出结果:
<ul>
<li><a href="/home/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
安全性和上下文
Hotmetal 默认会对所有字符串进行转义,以防止跨站脚本攻击(XSS)。如果你需要插入安全的 HTML 内容,可以使用 safe
函数:
from hotmetal import safe
document = (
"",
[],
[
safe("<!DOCTYPE html>"),
("html", {"lang": "en"}, []),
],
)
html_output = render(document, indent=2)
print(html_output)
输出结果:
<!DOCTYPE html>
<html lang="en"></html>
4. 典型生态项目
Hotmetal 是一个独立的 HTML 生成器,但它可以与其他 Python Web 框架(如 Flask、Django)结合使用,以生成动态 HTML 内容。以下是一些可能与 Hotmetal 结合使用的项目:
- Flask: 一个轻量级的 Python Web 框架,可以与 Hotmetal 结合使用来生成动态网页。
- Django: 一个功能强大的 Python Web 框架,Hotmetal 可以作为 Django 模板引擎的替代方案。
- MicroPython: 如果你在嵌入式设备上使用 MicroPython,Hotmetal 可以作为一个轻量级的 HTML 生成器。
通过这些生态项目的结合,Hotmetal 可以更好地满足不同场景下的 HTML 生成需求。
hotmetal A tiny HTML generator 项目地址: https://gitcode.com/gh_mirrors/ho/hotmetal