html自动生成-使用 Jinja2 模板引擎生成 html 报告

Flask 和 DjangoWeb 框架都使用模板语言引擎渲染网页。 Flask 使用 Jinja2 作为其模板引擎。 Jinja2 是一个快速、富有表现力且可扩展的模板引擎,它使用类似于 Python 句子模式的特殊占位符。 字符、模板和数据可以组合起来呈现最终文档。 Jinja2基于Python,可以安装在任何支持Python的平台上。 Jinja2还提供了可选的沙箱模板执行环境,可以保证模板的安全性。

Jinja2的使用不需要屈服于Web框架。 它可以独立使用。 相信很多人都有过撰写各种报告文件的经历。 如果某类文档需要重复编写,可以考虑使用Jinja2手动生成报告。 多么漂亮的模板文件啊,只要每次更新数据就可以手动生成漂亮的报表文档。 由于本文重点介绍Jinja2的基本用法,因此仅使用最简单的html模板进行演示。 读者可以设计或下载满意的html页面作为模板。

Jinja2的基本用法是这样的:

首先需要导出jinja2模块并创建一个Environment对象,该对象可以配置模板的加载模式、过滤器、变量等。

之后需要加载一个模板文件html自动生成,可以是本地文件,也可以是字符串html自动生成,也可以是从其他地方获取的对象。

最后需要调用模板的render方法,传入一些数据,可以是字典、列表、对象等,模板会根据这些数据生成最终的文档。

html自动生成_生成自动转账凭证_生成自动目录怎么弄

下面是一个简单的示例,演示了如何使用 jinja2 渲染 HTML 页面:

# 导入jinja2模块
import jinja2

# 创建一个Environment对象,指定模板的加载方式为文件系统
env = jinja2.Environment(loader=jinja2.FileSystemLoader('./templates'))

# 加载一个模板文件,这个文件的内容是一个HTML页面,其中有一些占位符
template = env.get_template('template.html')

# 定义一些数据,这些数据会替换模板中的占位符
data = {
'title': 'Hello Jinja2',
'name': 'Jinja2',
'items': ['Python', 'Jinja2', 'Flask']
}

# 调用模板的render方法,传入数据,得到最终的文档
document = template.render(data)

# 打印或保存文档
print(document)
with open("report.html", 'w', encoding='utf-8') as f:
f.write(document)

该模板文件template.html的内容如下:

<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Hello {{ name }}!</h1>
<ul>

{% for item in items %}

{% if item == "Jinja2" %}

<li>{{loop.index}} <b>{{ item }}</b></li>
{% else %}

<li>{{loop.index}} {{ item|upper }}</li>
{% endif %}

{% endfor %}

</ul>
</body>
</html>

在此模板文件中,使用了两个占位符:

{{…}} 表示一个变量,它将被传入数据中相应的值替换。 可以使用upper等过滤器改变变量,用|分隔,前者作为后者的输入。

{%...%} 代表一个控制结构,可以实现一些逻辑,比如循环、判断、继承等。

渲染后的文档如下所示:

<html>
<head>
<title>Hello Jinja2</title>
</head>
<body>
<h1>Hello Jinja2!</h1>
<ul>
<li>1 PYTHON</li>
<li>2 <b>Jinja2</b></li>
<li>3 FLASK</li>
</ul>
</body>
</html>

生成自动转账凭证_生成自动目录怎么弄_html自动生成

可以看到,模板中的占位符被数据中的值替换,生成了一个简单的 HTML 页面。

参考

[1].Jinja2外部过滤列表模板设计器文档—Jinja2英文指南2.8文档(pythontab.com);