TurboGears – 快閃記憶體訊息



TurboGears 提供了一個非常方便的訊息系統,用於以一種不顯眼的方式向用戶通知資訊。tg 模組中的 TGFlash 類提供對快閃記憶體訊息的支援,這些訊息儲存在普通 Cookie 中。此類支援在伺服器端以及透過 JavaScript 在客戶端獲取快閃記憶體訊息。

從 Python 本身使用時,TGFlash 類的 render() 方法可以從模板中呼叫以渲染快閃記憶體訊息。如果在 JavaScript 中使用,它會提供一個 WebFlash 物件。它公開 payload()render() 方法來獲取當前快閃記憶體訊息並從 JavaScript 渲染它。

使用“quickstart”建立 TurboGears 專案時,它具有一個 Master.html 模板。它包含該快閃記憶體物件的變數定義。從控制器接收到的此快閃記憶體訊息的內容替換了此模板中的標記佔位符。

<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
   <div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>

tg.flash_obj 是 WebFlash 物件,透過包含 master.html 模板,可以在任何渲染的模板內使用它。此物件允許檢索當前快閃記憶體訊息並顯示它。

快閃記憶體訊息儲存在 Cookie 中(預設名稱為 webflash),方法是使用 tg.flash() 方法。然後將訊息和狀態引數傳遞給它。

tg.flash('Message', 'status')

如果呼叫的 flash 方法執行重定向,則快閃記憶體將顯示在重定向頁面中。如果該方法直接公開模板,則快閃記憶體將顯示在模板本身中。

可以透過將 CSS 樣式應用於狀態程式碼來自定義快閃記憶體訊息的外觀。“quickstarted”專案包含錯誤、警告、資訊和確定狀態程式碼,這些程式碼由樣式表 public/css/style.css 自定義。還可以新增更多帶有樣式的狀態程式碼。

#flash > .warning {
   color: #c09853;
   background-color: #fcf8e3;
   border-color: #fbeed5;
}

#flash > .ok {
   color: #468847;
   background-color: #dff0d8;
   border-color: #d6e9c6;
}

#flash > .error {
   color: #b94a48;
   background-color: #f2dede;
   border-color: #eed3d7;
}

#flash > .info {
   color: #3a87ad;
   background-color: #d9edf7;
   border-color: #bce8f1;
}

需要在模板中包含此外部樣式表:

<link rel = "stylesheet" type = "text/css" media = "screen" 
   href = "${tg.url('/css/style.css')}" />

可以透過為 TGFlash 物件的 configure() 方法設定引數或在 app_cfg.py(在 config 資料夾中)中設定引數來實現任何快閃記憶體訊息支援的配置。可配置引數為:

序號 引數和說明
1

flash.cookie_name

用於儲存快閃記憶體訊息的 Cookie 名稱。預設為 webflash

2

flash.default_status

如果未指定,則為預設訊息狀態(預設為確定)

3

flash.template

渲染時用作快閃記憶體模板

4

flash.allow_html

開啟/關閉快閃記憶體訊息中的轉義,預設情況下不允許使用 HTML。

5

flash.js_call

從 JavaScript 顯示快閃記憶體時將執行的 JavaScript 程式碼。預設為 webflash.render()

6

flash.js_template

用於替換快閃記憶體訊息的完整 JavaScript 支援的string.Template 例項。

  • pop_payload() − 函式獲取當前快閃記憶體訊息、狀態和相關資訊。獲取快閃記憶體訊息將刪除 Cookie。

  • render(container_id, use_js=True) − 在模板內渲染快閃記憶體訊息或為它們提供 Javascript 支援。

  • container_id 是顯示訊息的 DIV,而 use_js 在將快閃記憶體渲染為 HTML 或用於 JavaScript 使用之間切換。

  • status − 只獲取當前快閃記憶體狀態,獲取快閃記憶體狀態將刪除 Cookie。

  • message − 只獲取當前快閃記憶體訊息,獲取快閃記憶體訊息將刪除 Cookie。

如何製作簡單的快閃記憶體訊息?

在下面的示例中,在根控制器類中提供了一個 flash() 方法。它呼叫一個 flash() 訊息,該訊息將渲染到公開的模板 flash.html

from hello.lib.base import BaseController
from tg import expose, flash, redirect, request

class RootController(BaseController):
   @expose('hello.templates.flash')
   def flash(self, user = None):
      
      if user:
         flash(message = "Welcome "+user,status = "ok")
      else:
         flash(message = "Welcome Guest",status = "info")
      return {}

在 templates 資料夾中建立 flash.html 的程式碼如下所示

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/"
   xmlns:xi = "http://www.w3.org/2001/XInclude">

   <head>
      <title>TurboGears 2.3: Flash messages>/title>
      <link rel = "stylesheet" type = "text/css" media = "screen"
         href = "${tg.url('/css/style.css')}" />
			
      <py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
         <div py:if = "flash" py:replace = "Markup(flash)" />
      </py:with>
		
   </head>

   <body>
      <h2>Hello TurboGears</h2>
   </body>
	
</html>

啟動伺服器並在瀏覽器中輸入 https://:8080/flash?user=MVL

Flash Message

將 URL 更改為 https://:8080/flash 並檢視根據 style.css 中的定義以不同格式顯示的快閃記憶體訊息

Message
廣告
© . All rights reserved.