python 用Flask?生成Word文档

bweufnob  于 2023-03-16  发布在  Python
关注(0)|答案(4)|浏览(271)

我正在尝试开发一个单页flask应用程序,它允许用户下载word文档。我已经知道如何使用python-docx创建/保存文档,但现在我需要在响应中提供该文档。有什么想法吗?
以下是我目前掌握的情况:

from flask import Flask, render_template
from docx import Document
from cStringIO import StringIO

@app.route('/')
def index():
    document = Document()
    document.add_heading("Sample Press Release", 0)
    f = StringIO()
    document.save(f)
    length = f.tell()
    f.seek(0)
    return render_template('index.html')
aamkag61

aamkag611#

除了render_template('index.html')之外,您还可以:

from flask import Flask, render_template, send_file
from docx import Document
from cStringIO import StringIO

@app.route('/')
def index():
    document = Document()
    document.add_heading("Sample Press Release", 0)
    f = StringIO()
    document.save(f)
    length = f.tell()
    f.seek(0)
    return send_file(f, as_attachment=True, attachment_filename='report.doc')
bprjcwpo

bprjcwpo2#

您可以使用send_from_directory作为this答案。
如果您正在发送文本,也可以使用make_response帮助器,如this answer中所示。

w8f9ii69

w8f9ii693#

“* 为那些在我之后逝去的人**
参考这两个环节:

io.StringIO现在取代了cStringIO.StringIO
此外,由于document.save(f)应接收pass或二进制文件,因此它将引发错误

代码应如下所示:

from flask import Flask, render_template, send_file
from docx import Document
from io import BytesIO

@app.route('/')
def index():
    document = Document()
    f = BytesIO()
    # do staff with document
    document.save(f)
    f.seek(0)

    return send_file(
        f,
        as_attachment=True,
        attachment_filename='report.docx'
    )
plupiseo

plupiseo4#

用途

return Response(generate(), mimetype='text/docx')

在您的情况下,Generate()应替换为f。有关详细信息,请参阅文件夹http://flask.pocoo.org/docs/1.0/patterns/streaming/中的流

相关问题