使用Flask生成word文档?

时间:2014-11-20 00:58:59

标签: python flask python-docx

我试图启动一个允许用户下载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')

4 个答案:

答案 0 :(得分:5)

而不是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')

答案 1 :(得分:0)

您可以在this回答中使用send_from_directory

如果您要发送文字,也可以使用make_response帮助,如this答案。

答案 2 :(得分:0)

使用

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

Generate()应该用f代替 有关更多信息,请查看烧瓶中的流 http://flask.pocoo.org/docs/1.0/patterns/streaming/

答案 3 :(得分:0)

对于那些如何通过我...

参考这两个链接:

<块引用>

io.StringIO 现在取代了 cStringIO.StringIO

它也会引发错误 因为 document.save(f) 应该收到一个通行证或二进制文件

代码应该是这样的:

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'
    )