在一个 Flask 响应中返回下载并呈现的页面
- 2025-03-21 09:06:00
- admin 原创
- 32
问题描述:
我想返回渲染后的页面和可下载的文件作为对请求的响应。我尝试返回两个响应的元组,但不起作用。我该如何提供下载和页面?
return response, render_template('database.html')
return render_template('database.html'), response
Flask 能够处理这种情况吗?这似乎是一个常见的问题,我只是想发回一个文件供下载,然后呈现页面。
解决方案 1:
您无法对单个请求返回多个响应。相反,请生成文件并将其存储在某处,然后使用另一个路由提供这些文件。返回渲染后的模板,其中包含用于提供文件的路由的 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>
解决方案 2:
我只是在寻找一些更简单的东西,所以这里为那些寻找更简单东西的人提供了解决方案:
一个相当简单但粗糙的解决方案是使用 javascript。
例如这样:
<button onclick="goBack()"><a href="{{ url_for('export') }}">Export</a></button>
<script>
function goBack() {
window.history.back();
}
</script>
JS 将打开您之前所在的浏览器窗口,这意味着它停留在原处。下载由 ref 发起。然后 ref 指向函数所在的 flask-route。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD