2 回答

TA貢獻1816條經驗 獲得超4個贊
這個問題很可能是由 Flask 內置的緩存引起的。這設置了Cache-Control
標頭,并適用于 Flask 提供的靜態文件,也適用于send_file
和send_from_directory
函數。
這可以解釋文件下載的行為,但打印語句未運行。事實上,該請求甚至不會到達服務器。
您可以在開發工具的網絡選項卡上直觀地看到這一點:
您可以通過在應用程序上設置以下配置變量來禁用此功能:
app.config['SEND_FILE_MAX_AGE_DEFAULT']?=?-1
該-1
值禁用緩存。
您可能必須實際清除瀏覽器緩存才能使此設置生效,或者更改端點的 URL?/download
,盡管這很不方便。
設置后請注意差異:

TA貢獻1829條經驗 獲得超7個贊
我假設您希望打印語句顯示在 HTML 中。如果這不是您想要的,我深表歉意。
首先, print 在您的示例中所做的是在服務器上輸出文本,因此文本永遠不會發送到您的 HTML。
要將消息發送到 HTML,您可以flash
從 Flask 導入。該flash
函數將向您的 HTML 發送一條消息,您可以在其中接收帶有get_flashed_messages()
.
例子
下面我們做幾件事。
相反
print
,我們使用flash
.?傳遞給的第一個參數flash
是消息。("certificate printed"
或os.getcwd()
) 第二個參數是消息的類別。(?"download_file"
)請注意,類別可以是完全任意的,只要模板中使用相同的類別即可。HTML 中的鏈接下方。我們調用
get_flashed_messages
它并將其分配給一個變量download_msgs
。在這種情況下唯一的論據是category_filter=["download_file"]
。這將獲取我們之前發送的所有消息flash
,并僅保留具有該"download_file"
類別的消息。我們使用 來檢查消息
{% if download_msgs %}
,使用 來循環消息{% for message in download_msgs %}
,并顯示每條消息。
燒瓶:
from flask import Flask, flash, send_file
app = Flask(__name__)
@app.route('/download')
def download_file():
? ? path = "certificate.docx"
? ? flash("certificate printed", "download_file")
? ? flash(os.getcwd(), "download_file")
? ? return send_file(path, as_attachment=True)
HTML:
<p>
? <a href="{{ url_for('.download_file') }}">Download</a>
? {% with download_msgs = get_flashed_messages(category_filter=["download_file"]) %}
? ? {% if download_msgs %}
? ? ? <ul class=flashes>
? ? ? {% for message in download_msgs %}
? ? ? ? <li>{{ message }}</li>
? ? ? {% endfor %}
? ? ? </ul>
? ? {% endif %}
? {% endwith %}
</p>
這個例子很粗糙,但我希望它能回答你的問題
概括
要將消息從 Flask 應用程序發送到 HTML 代碼,您可以使用
flash
Flask 應用程序中的函數。要從 Flask 應用程序接收消息到 HTML 代碼,您可以
get_flashed_messages
在 HTML 代碼中使用該函數。您可以使用類別來區分閃現的消息。在您的燒瓶應用程序中使用第二個參數
flash
。在 HTML 代碼中使用Category_filter關鍵字參數。get_flashed_messages
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報