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