使用 Python Docxtpl 生成 Word 文档并返回 HTTP 响应
在这篇文章中,我们将一起学习如何使用 Python 的 docxtpl
库来动态生成 Word 文档,并将其返回作为 HTTP 响应。以下是整个流程的简要概述:
流程概述
我们将按照以下步骤进行操作:
步骤 | 描述 |
---|---|
1 | 创建基本的 Flask 应用 |
2 | 安装所需的库 docxtpl |
3 | 创建 Word 模板 |
4 | 编写代码以加载模板并填充数据 |
5 | 返回 HTTP 响应下载文档 |
第一步:创建基本的 Flask 应用
首先,我们需要创建一个基本的 Flask 应用。Flask 是一个流行的 Python Web 框架。
安装 Flask
在终端运行以下命令来安装 Flask:
pip install Flask
创建 Flask 应用
新建一个文件 app.py
并写入以下代码:
from flask import Flask, send_file
app = Flask(__name__)
@app.route('/')
def home():
return "欢迎使用 Word 文档生成器"
上述代码创建了一个简单的 Flask 应用,并定义了一个路由 /
。当用户访问此路由时,会显示一条欢迎信息。
第二步:安装所需的库 docxtpl
接下来,安装 docxtpl
库,这是一个用于创建动态 Word 文档的 Python 库。
安装命令
在终端输入:
pip install docxtpl
此命令会将 docxtpl
库安装到您的环境中。
第三步:创建 Word 模板
在生成 Word 文档之前,我们需要一个模板文件。创建一个名为 template.docx
的文档,这个文档可以包含一些你希望动态填充的数据,比如:
尊敬的 {{ name }}:
感谢您使用我们的服务!
祝好,
团队
在这个模板中,{{ name }}
是一个变量,在程序运行时会被实际的值替代。
第四步:编写代码以加载模板并填充数据
现在,我们来编写代码,使其能够加载模板,并将数据填入。
更新 app.py
在 app.py
文件中添加下面的代码:
from flask import Flask, render_template_string, send_file
from docxtpl import DocxTemplate
import os
app = Flask(__name__)
@app.route('/')
def home():
return "欢迎使用 Word 文档生成器"
@app.route('/generate-doc')
def generate_doc():
# 加载 Word 模板
doc = DocxTemplate("template.docx")
# 模板中要填充的数据
context = {
'name': '小白' # 这里可以动态传递数据
}
# 填充数据到模板中
doc.render(context)
# 临时保存生成的文档
output_filename = "output.docx"
doc.save(output_filename)
# 返回生成的文件作为 HTTP 响应
return send_file(output_filename, as_attachment=True)
代码解释
-
导入模块:
from docxtpl import DocxTemplate
这行代码是导入
docxtpl
中的DocxTemplate
类,用于加载和处理 Word 模板。 -
生成文档的路由:
@app.route('/generate-doc')
定义了另一个路由
/generate-doc
,当访问此路由时将生成 Word 文档。 -
加载模板:
doc = DocxTemplate("template.docx")
加载之前创建的模板文件
template.docx
。 -
创建上下文:
context = { 'name': '小白' }
创建一个包含要填充数据的字典
context
,name
的值为小白
。 -
渲染模板:
doc.render(context)
使用
context
中的数据填充模板。 -
保存生成的文档:
doc.save(output_filename)
将填充后的文档保存为
output.docx
。 -
返回 HTTP 响应:
return send_file(output_filename, as_attachment=True)
使用
send_file
方法将生成的文档发送给用户,并设置as_attachment=True
使其作为下载文件。
第五步:运行 Flask 应用
确保在终端中运行 Flask 应用:
python app.py
访问 ` 就可以下载生成的文档了。
总结
在这篇文章中,我们从头到尾实现了一个功能齐全的 Flask 应用,能够生成并下载一个动态填充的 Word 文档。以下是代码的类图,使用 Mermaid 语法表示:
classDiagram
class FlaskApplication {
+home()
+generate_doc()
}
class DocxTemplate {
+DocxTemplate(template_path)
+render(context)
+save(output_path)
}
我们通过简单的步骤和代码注释,理解了如何利用 docxtpl
和 Flask 提供动态文档生成功能。希望你能通过这篇文章获得启发并深入学习 Python Web 开发!