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の定義に従って異なるフォーマットのフラッシュメッセージを参照してください。