Turbogears-serving-templates

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

TurboGears-配信テンプレート

HTMLコンテンツはブラウザに返されますが、より高度な出力を得るには、テンプレートエンジンの使用が常に推奨されます。 ギアボックスによって「クイックスタート」されるフルスタックプロジェクトでは、Genshiがデフォルトのテンプレートレンダラーとして有効になっています。 ただし、最小限のアプリケーションでは、Genshi(またはjinjaなどの他のテンプレートエンジン)をインストールして有効にする必要があります。 Genshiテンプレートエンジンは、純粋なxhtmlでテンプレートを記述し、コンパイル時に問題を検出して破損したページの提供を防ぐためにテンプレートを検証することを許可します。

テンプレートは、ドット表記を使用して参照されます。 Helloプロジェクトでは、テンプレートWebページを保存するためのテンプレートディレクトリが提供されています。 したがって、 samplelhello.templates.sample (拡張子は言及されていません)として参照されます。 TurboGearsは、* tg.render_template()*関数によってコントローラーメソッドをリンクするための公開デコレーターを介してこのテンプレートをレンダリングします。

公開されたコントローラー関数は、Python辞書オブジェクトを返します。 このディクショナリオブジェクトは、リンクされたテンプレートに順番に渡されます。 テンプレートのプレースホルダーには、辞書の値が入力されます。

まず、プレーンHTMLスクリプトを使用してWebページを表示します。 HTMLスクリプト内で解析するデータを送信するつもりはないため、公開されたコントローラーは* null辞書オブジェクト*を返します。

サンプルHTMLを作成する方法

*samplel* を以下に示します。 プロジェクトのテンプレートディレクトリに保存されていることを確認してください。
<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>

   <body>
      <h2>Hello, Welcome to TurboGears!.</h2>
   </body>
</html>
*root.py* に* sample()*関数を追加し、それを介してsamplelを公開します。
@expose("hello.templates.sample")
   def sample(self):
      return {}

Webサーバーの起動後にURL http://localhost:8080/sample を入力すると、次の結果がブラウザーに表示されます。

結果の表示

上記のように、辞書オブジェクトはパラメーターのコレクションとしてGenshiテンプレートに送信されます。 このテンプレートには、コントローラーから受信したパラメーターが動的に入力される「プレースホルダー」が含まれています。

  • sample()*関数を変更して、辞書オブジェクトをサンプルテンプレートに送信します。
@expose("hello.templates.sample")
   def sample(self,name):
      mydata = {'person':name}
      return mydata

テンプレートフォルダーに samplel を作成します( templates \ samplel

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>

   <body>
      <h2>Hello, my name is ${person}!.</h2>
   </body>
</html>

上記のHTMLコードでは、 $ \ {person} がプレースホルダーです。 ブラウザでURLとして http://localhost:8080/sample?name = MVL を入力します。 このURLは、ルートコントローラーの* sample()*メソッドにマッピングされます。 辞書オブジェクトを返します。 これは、templatesディレクトリのリンクされたテンプレートページsamplelによって選択されます。 その後、Webページで$ \ {person}がMVLに置き換えられます。

コントローラ関数でHTMLフォームデータにアクセスすることもできます。 HTMLフォームはフォームデータの送信に使用します。

結果