2 回答

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

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
我假設(shè)您希望打印語(yǔ)句顯示在 HTML 中。如果這不是您想要的,我深表歉意。
首先, print 在您的示例中所做的是在服務(wù)器上輸出文本,因此文本永遠(yuǎn)不會(huì)發(fā)送到您的 HTML。
要將消息發(fā)送到 HTML,您可以flash
從 Flask 導(dǎo)入。該flash
函數(shù)將向您的 HTML 發(fā)送一條消息,您可以在其中接收帶有get_flashed_messages()
.
例子
下面我們做幾件事。
相反
print
,我們使用flash
.?傳遞給的第一個(gè)參數(shù)flash
是消息。("certificate printed"
或os.getcwd()
) 第二個(gè)參數(shù)是消息的類別。(?"download_file"
)請(qǐng)注意,類別可以是完全任意的,只要模板中使用相同的類別即可。HTML 中的鏈接下方。我們調(diào)用
get_flashed_messages
它并將其分配給一個(gè)變量download_msgs
。在這種情況下唯一的論據(jù)是category_filter=["download_file"]
。這將獲取我們之前發(fā)送的所有消息flash
,并僅保留具有該"download_file"
類別的消息。我們使用 來(lái)檢查消息
{% if download_msgs %}
,使用 來(lái)循環(huán)消息{% 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>
這個(gè)例子很粗糙,但我希望它能回答你的問(wèn)題
概括
要將消息從 Flask 應(yīng)用程序發(fā)送到 HTML 代碼,您可以使用
flash
Flask 應(yīng)用程序中的函數(shù)。要從 Flask 應(yīng)用程序接收消息到 HTML 代碼,您可以
get_flashed_messages
在 HTML 代碼中使用該函數(shù)。您可以使用類別來(lái)區(qū)分閃現(xiàn)的消息。在您的燒瓶應(yīng)用程序中使用第二個(gè)參數(shù)
flash
。在 HTML 代碼中使用Category_filter關(guān)鍵字參數(shù)。get_flashed_messages
- 2 回答
- 0 關(guān)注
- 196 瀏覽
添加回答
舉報(bào)