使用Flask在一个请求中下载文件和渲染模板

时间:2015-06-29 09:55:54

标签: python flask request response

在我的应用程序中,我正在渲染PDF文件并将其作为响应传回。出于这个目的,我使用了flask_weasyprint' s render_pdf,这正是这样做的:

def render_pdf(html, stylesheets=None, download_filename=None):
    if not hasattr(html, 'write_pdf'):
        html = HTML(html)
    pdf = html.write_pdf(stylesheets=stylesheets)
    response = current_app.response_class(pdf, mimetype='application/pdf')
    if download_filename:
        response.headers.add('Content-Disposition', 'attachment', filename=download_filename)
    return response

我现在需要渲染一个模板+将渲染的pdf作为下载返回。像

这样的东西
@app.route("/view")
def view() :
    resp1 = render_pdf(HTML(string="<p>Render me!</p>"), download_filename = "test.pdf")
    resp2 = render_template("test.html")
    return resp1, resp2

有没有办法实现这个目标?任何解决方法?

1 个答案:

答案 0 :(得分:0)

我不确定这是否可以在后端解决,你想在一个请求后发送两个http响应。应该可以吗? (我真的不知道)客户不应该做出两个回复吗? (JavaScript的)。

在render_template调用中返回一个选项javascript datablob。 也许是这样的? (另):

        fileData = new Blob([pdf_data_here], { type: 'application/pdf' }); 
        fileUrl = URL.createObjectURL(fileData);
        window.location.assign(fileUrl);

或者只是使用window.location.assign()函数生成第二个请求。

或者将数据base64编码为href属性?