TurboGears –フラッシュメッセージ

TurboGearsは、邪魔にならない方法でユーザーに情報を通知するための非常に便利なメッセージングシステムを提供します。tgモジュールのTGFlashクラスは、プレーンCookieに保存されているメッセージのフラッシュをサポートします。このクラスは、JavaScriptを介したサーバー側とクライアント側でのフラッシュメッセージのフェッチをサポートします。

ザ・ render()TGFlashクラスのメソッドは、Python自体から使用する場合、テンプレートから呼び出してフラッシュメッセージをレンダリングできます。JavaScriptで使用すると、WebFlashオブジェクトが提供されます。露出しますpayload() そして render() 現在のフラッシュメッセージをフェッチしてJavaScriptからレンダリングするメソッド。

TurboGearsプロジェクトが「quickstart」を使用して作成される場合、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テンプレート。このオブジェクトは、現在のフラッシュメッセージを取得して表示することを許可します。

Flashメッセージは、を使用してCookie(デフォルトでは名前はwebflash)に保存されます。 tg.flash()方法。次に、メッセージとステータスのパラメータが渡されます。

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

フラッシュと呼ばれるメソッドがリダイレクトを実行する場合、フラッシュはリダイレクトされたページ内に表示されます。メソッドがテンプレートを直接公開する場合、フラッシュはテンプレート自体の内部に表示されます。

フラッシュメッセージの外観は、ステータスコードにCSSスタイルを適用することでカスタマイズできます。「クイックスタート」プロジェクトには、スタイルシートpublic / css / style.cssによってカスタマイズされたエラー、警告、情報、およびOKステータスコードが含まれています。スタイル付きのステータスコードをさらに追加することもできます。

#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')}" />

Flashメッセージサポートの構成は、TGFlashオブジェクトのconfigure()メソッドのパラメーターを設定するか、app_cfg.py(configフォルダー内)で実行できます。設定可能なパラメータは次のとおりです。

シニア番号 パラメータと説明
1

flash.cookie_name

フラッシュメッセージの保存に使用されるCookieの名前。デフォルトはwebflash

2

flash.default_status

指定されていない場合のデフォルトのメッセージステータス(デフォルトではOK)

3

flash.template

として使用 flash template レンダリングされたとき。

4

flash.allow_html

ターン on/off escaping in flash messages、デフォルトではHTMLは許可されていません。

5

flash.js_call

JavaScriptからフラッシュを表示するときに実行されるJavaScriptコード。デフォルトはwebflash.render()

6

flash.js_template

string.Template フラッシュメッセージの完全なJavaScriptサポートを置き換えるために使用されるインスタンス。

  • pop_payload() −機能 fetches current flash message, statusおよび関連情報。フラッシュメッセージを取得すると、Cookieが削除されます。

  • render(container_id, use_js=True) −テンプレート内でフラッシュメッセージをレンダリングするか、Javascriptサポートを提供します。

  • container_id はメッセージが表示されるDIVであり、use_jsはフラッシュをHTMLとしてレンダリングするかJavaScriptで使用するかを切り替えます。

  • status −現在のフラッシュステータスのみを取得します。フラッシュステータスを取得すると、Cookieが削除されます。

  • message −現在のフラッシュメッセージのみを取得します。フラッシュメッセージを取得すると、Cookieが削除されます。

簡単なフラッシュメッセージを作成する方法は?

次の例では、flash()メソッドがルートコントローラークラスで提供されています。公開されたテンプレートflash.htmlにレンダリングされるflash()メッセージを呼び出します。

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 {}

作成するためのコード 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>

サーバーを起動して、 http://localhost:8080/flash?user=MVL ブラウザで

URLをに変更します http://localhost:8080/flash そして、style.cssの定義に従って異なるフォーマットのフラッシュメッセージを参照してください。