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

发布于 2021-01-29 19:36:22

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

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

Flask是否有能力应对这种情况?似乎是一个普通问题,我只是想将文件发送回下载,然后呈现页面。

关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    您不能将多个响应返回到单个请求。取而代之的是,生成文件并将其存储在某个位置,并通过另一条路径来提供服务。返回呈现的模板,并提供一个网址以提供该文件的路径。

    @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生成下载网址。

    <a href="{{ url_for('database_download', filename=filename) }}">Download</a>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看