簡體   English   中英

在一個 Flask 響應中返回下載和呈現的頁面

[英]Return a download and rendered page in one Flask response

我想返回一個呈現的頁面和一個可下載的文件作為對請求的響應。 我試圖返回兩個響應的元組,但它不起作用。 我如何提供下載和頁面?

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

Flask 是否能夠處理這種情況? 似乎是一個司空見慣的問題,我只是想發回一個文件供下載,然后呈現頁面。

您不能對單個請求返回多個響應。 相反,生成文件並將其存儲在某處,並通過另一條路線為它們提供服務 返回帶有 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>

我只是在尋找更簡單的東西,所以這里為尋找更簡單東西的人提供了解決方案:

一個非常簡單和骯臟的解決方案是使用 javascript。

例如像這樣:

<button onclick="goBack()"><a href="{{ url_for('export') }}">Export</a></button>

<script>
function goBack() {
  window.history.back();
}
</script>

JS 將打開您之前所在的瀏覽器窗口,這意味着它保持不變。 下載是由 ref 啟動的。 然后 ref 通向函數所在的燒瓶路線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM