在一个Flask响应中返回下载和呈现的页面

问题描述 投票:8回答:1

我想返回一个呈现的页面和一个可下载的文件作为对请求的响应。我试图返回两个响应的元组,但它不起作用。我该如何提供下载和页面?

return response, render_template('database.html')
return render_template('database.html'), response

Flask能否处理这种情况?看起来像一个普通的问题,我只是想发回一个文件进行下载,然后渲染页面。

python flask
1个回答
8
投票

您无法向单个请求返回多个响应。相反,生成并存储文件在某处,serve them与另一条路线。返回渲染的模板,其中包含用于提供文件的路径的URL。

@app.route('/database')
def database():
    # generate some file name
    # save the file in the `database_reports` folder used below
    return render_template('database.html', filename=stored_file_name)

@app.route('/database_download/<filename>')
def database_download(filename):
    return send_from_directory('database_reports', filename)

在模板中,使用url_for生成下载URL。

<a href="{{ url_for('database_download', filename=filename) }}">Download</a>
© www.soinside.com 2019 - 2024. All rights reserved.