2016-12-03 80 views
3

我正在使用Python中的Flask開發Web應用程序。如何在不重新加載Flask頁面的情況下顯示閃爍的消息?

我的應用程序中有一個小功能,它可以計算背景中的某些值,並通過閃爍的消息在網頁上顯示結果。

一切都顯示和工作正常,但它需要頁面重新加載,以獲得閃爍的消息。

我想顯示消息,無需重新加載頁面。

我聽說我可以用js做到這一點,但我對js不熟悉。

如果您有任何想法或建議,我將不勝感激。

有我的代碼可以構建我在做什麼的更好的圖片。

這是

{% macro render_field(field) %} 
 
<dt> {{ field.label }} 
 
<dd> {{ field(**kwargs)|safe }} 
 
{% if field.errors %} 
 
     <ul class=errors> 
 
     {% for error in field.errors %} 
 
       <li>{{ error }}</li> 
 
     {% endfor %} 
 
     </ul> 
 
{% endif %} 
 
</dd> 
 
{% endmacro %}

這是HTML文件中我想顯示閃爍的消息我的應用程序和主HTML文件的渲染:

<div class="container-fluid" style="min-height:100%"> 
 
    {% with messages = get_flashed_messages() %} 
 
    {% if messages %} 
 
     {% for message in messages %} 
 
     <div class="alert alert-warning alert-dismissible" role="alert"> 
 
     <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 
 
      <span aria-hidden="true">&times;</span> 
 
     </button> 
 
     {{message}} 
 
     </div> 
 
     {% endfor %} 
 
    {% endif %} 
 
    {% endwith %} 
 
</div>

回答

0

這是不可能通過Python沒有reloa在頁面上。你必須在JavaScript中做到這一點。我建議使用display: nonedisplay: block的CSS樣式。這是一個例子。

1)Python代碼,這應該在您的app.pyflask.py文件中。

app.route('/flash/<message>') 
def flash(message): 
    return render_template('flash.html', msg=message) 

這將渲染名爲flash.html的HTML頁面。傳入的URL也會有另一個參數,<message>這是會閃爍的消息。像這樣的URL,localhost:80/flash/Hello%20World!將會顯示「Hello World!」的消息。在你的屏幕上。

還有另外一種方式來傳遞消息,這是參數。代碼就是這樣。

app.route('/flash') 
def flash(): 
    message = request.args.get("msg") 
    return render_template("flash.html", ,msg=message) 

這使用燒瓶的請求參數。所以像這樣的URL,localhost:80/flash?msg=Hello%20World!會給出一個閃爍的消息,說「Hello World!」。如果您想使用此方法,請確保在導入語句中包含導入語句from flask import request

2)Html代碼,這是一個單獨的文件,在您的模板文件夾中命名爲flash.html

<body> 
    <h1 id="header">{{ message }}</h1> 
    <script> 
    var heading = $("#header"); 
    setInterval(function() { 
     if (heading.style.display == "block") { heading.style.display = "none"; } 
     else if (heading.style.display == "none") { heading.style.display = "block"; } 
    }, 1000); 
    </script> 
</body> 

setInterval中的1000是毫秒。所以標題每2秒閃爍一次

+0

使用它,就像一個控制檯日誌行我瞭解你的榜樣它具有價值迴歸的功能,但我能做些什麼,如果我的應用我有顯示消息,繼續閱讀腳本?我不能只發送變量到函數,因爲它會執行從開始功能 – trm0808

+0

這將繼續閱讀腳本。 'setInterval'就像一個線程。我不知道我在這方面有多正確,但我確實知道它會在'setInterval'發生後繼續閱讀腳本。 –

+0

我很抱歉,但如何將flash(「文本」)傳遞到html模板?你用變量傳遞它嗎? – trm0808

1

這裏是Flask Web Development: Developing Web Applications with Python (pp. 46-48)不得不說消息閃爍:

有時是非常有用的給用戶的狀態更新的請求完成後。此 可能是確認消息,警告或錯誤。一個典型的例子是,當您向登錄表單提交登錄表單時出現錯誤,服務器通過將登錄表單再次上傳並顯示上面的消息來通知您,您的用戶名或密碼是無效的。 Flask包含此功能作爲核心功能。示例4-6顯示瞭如何使用該函數來實現此目的。

例4-6。 hello.py:閃現消息

Example 4-6. hello.py: Flashed messages

在這個例子中,每次一個名字被提交它比對用戶會話存儲 名稱,該名稱將先前提交的過程中已經放在那裏 相同的形式。如果這兩個名稱不同,則會調用flash()函數,並在發送回客戶端的下一個響應中顯示一條 消息。

調用flash()不足以顯示消息; 應用程序使用的模板需要呈現這些消息。渲染閃存郵件的最佳位置是基本模板 ,因爲這將在所有頁面中啓用這些郵件。 Flask使 get_flashed_messages()函數可用於模板以檢索消息, 呈現它們,如例4-7所示。

例4-7。模板/ base.html文件:閃光消息再現

Example 4-7. templates/base.html: Flash message rendering

在這個例子中,消息通過引導的警報CSS樣式警告 消息呈現(一個如圖4-4所示)。

Figure 4-4. Flashed message

圖4-4。一個循環使用,因爲可能有多個消息閃蒸消息

排隊等待顯示,一個用於 每次flash()被稱爲在先前的請求週期。從get_flashed_messages()檢索到的消息將不會在下次調用該函數時返回, 所以刷新的消息僅出現一次,然後被丟棄。

+0

這是一個很好的例子,但如果不單擊按鈕應顯示消息該怎麼辦?因爲在我的應用程序中,我有一個腳本,使用臉部識別攝像頭對某些動作進行預處理,並且它假設顯示消息,例如用戶被識別或不識別 – trm0808

+1

@boardrider請不要在您的文章中使用圖片。而是使用堆棧溢出的代碼功能。這是做消息的一個很好的例子。我已經爲我的應用程序創建了類似的東西。我的帖子是爲了*閃爍*消息。 –

0

您可能需要考慮使用Toastr代替。我用Flask的Flash功能遇到了同樣的障礙,Toastr是純JS。你可以在你的代碼

toastr.info("Here's a message to briefly show to your user");

相關問題