Turbogears-flash-messages

提供:Dev Guides
移動先:案内検索

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

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

TGFlashクラスの* render()メソッドをPython自体から使用する場合、テンプレートから呼び出してフラッシュメッセージをレンダリングできます。 JavaScriptで使用する場合、WebFlashオブジェクトを提供します。 * payload()*および render()*メソッドを公開して、現在のフラッシュメッセージを取得し、JavaScriptからレンダリングします。

「クイックスタート」を使用してTurboGearsプロジェクトを作成すると、Masterlテンプレートが作成されます。 そのFlashオブジェクトの変数の定義が含まれています。 コントローラから受信したこのフラッシュメッセージの内容は、このテンプレート内のマークされたプレースホルダーを置き換えます。

<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オブジェクトで、レンダリングされたテンプレート内で *masterl* テンプレートを含めることで利用できます。 このオブジェクトを使用すると、現在のフラッシュメッセージを取得して表示できます。

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

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フォルダー内)でパラメーターを設定することで実現できます。 設定可能なパラメータは次のとおりです-

Sr.No. Parameters & Description
1

flash.cookie_name

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

2

flash.default_status

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

3

flash.template

レンダリング時に* flashテンプレート*として使用されます。

4

flash.allow_html

  • Flashメッセージでのエスケープのオン/オフを切り替えます。デフォルトではHTMLは許可されていません。
5
  • flash.js_call*

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

6

flash.js_template

  • string.Template* インスタンスは、フラッシュメッセージのJavaScriptサポートを完全に置き換えるために使用されます。
  • * pop_payload()-関数*現在のフラッシュメッセージ、ステータス、および関連情報を取得します。 フラッシュメッセージを取得すると、Cookieが削除されます。
  • * render(container_id、use_js = True)*-テンプレート内のフラッシュメッセージをレンダリングするか、Javascriptサポートを提供します。
  • container_id はメッセージが表示されるDIVであり、use_jsはフラッシュをHTMLとしてレンダリングするかJavaScriptを使用するかを切り替えます。
  • status -現在のフラッシュステータスのみを取得し、フラッシュステータスを取得するとCookieが削除されます。
  • メッセージ-現在のフラッシュメッセージのみを取得し、フラッシュメッセージを取得するとCookieが削除されます。

シンプルなFlashメッセージを作成する方法は?

次の例では、ルートコントローラークラスでflash()メソッドが提供されています。 公開されたテンプレートflashlにレンダリングされる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 {}

テンプレートフォルダーに flashl を作成するためのコードは次のとおりです。

<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の定義に従って異なる形式のフラッシュメッセージを確認します。

メッセージ