Turbogears-genshi-template-language
TurboGears-Genshiテンプレート言語
Genshiは、XMLベースのテンプレート言語です。 TurboKearsの以前のバージョンのテンプレートエンジンであった Kid に似ています。 GenshiとKidは、 HSLT、TAL 、 PHP などの他の有名なテンプレート言語に触発されています。
Genshiテンプレートは、処理ディレクティブで構成されています。 これらのディレクティブは、テンプレート内の要素と属性です。 Genshiディレクティブは、ネームスペースhttp://genshi.edgewall.org/で定義されています。 したがって、この名前空間はテンプレートのルート要素で宣言する必要があります。
上記の宣言は、デフォルトのネームスペースがXHTMLに設定され、Genshiディレクティブに「py」プレフィックスが付いていることを意味します。
げんし指令
Genshiでは多くのディレクティブが定義されています。 以下のリストはGenshiディレクティブを列挙します-
- py:if
- py:choose
- py:for
- py:def
- py:match
- py:with
- py:replace
- py:content
- py:attrs
- py:strip
条件付きセクション
Genshiは、コンテンツの条件付きレンダリングのための2つのディレクティブpy:ifおよびpy:chooseを提供します。
py:if
このディレクティブの要素のコンテンツは、* if句*の式がtrueと評価された場合にのみレンダリングされます。 テンプレートコンテキストのデータが \ {'foo':True、 'bar': 'Hello'} であると仮定すると、次のディレクティブ-
になります
ただし、 'foo’がFalse に設定されている場合、この出力はレンダリングされません。
このディレクティブは要素としても使用できます。 この場合、 <py:if> は対応する </py:if> で閉じる必要があります
py:choose
次の例は、 py:choose および py:when ディレクティブの使用法を示しています。 HTMLフォームは/marks URLにデータを投稿します。 * marks()関数はマークをリダイレクトし、辞書オブジェクトの形式で結果を *totall テンプレートにリダイレクトします。 result Pass/Fail の条件付き表示は、 py:choose および py:when ディレクティブを使用して実現されます。
マークを入力するHTMLスクリプト( marksl )は次のとおりです-
テンプレートフォルダーの totall は辞書データを受け取り、次のように条件付きでhtml出力に解析します-
サーバーを起動します(まだ実行されていない場合)
- ブラウザに *http://localhost
- 8080/marksform* と入力します-
- 合計*は次の出力をレンダリングします-
py:for
py:forディレクティブの要素は、反復可能な(通常はPython Listオブジェクト)の各アイテムに対して繰り返されます。 items = [1,2,3] がテンプレートコンテキストに存在する場合、次のpy:forディレクティブによって反復できます-
次の出力がレンダリングされます-
次の例は、py:forディレクティブを使用してtotallテンプレートでレンダリングされたHTMLフォームデータを次のように使用できることを示しています-
HTMLフォームスクリプト
- loop()*コントローラーはフォームデータを読み取り、リストオブジェクトの形式でtotal.templateに送信します。
templテンプレートはpy:forループを使用して、dictオブジェクトのコンテンツをテーブルの形式でレンダリングします。
サーバーを起動します(まだ実行されていない場合)
- ブラウザに *http://localhost
- 8080/marksform* と入力します。
上記のフォームが送信されると、次の出力がブラウザーに表示されます。
py:def
このディレクティブは、マクロを作成するために使用されます。 マクロは、テンプレートコードの再利用可能なスニペットです。 Python関数と同様に、名前があり、オプションでパラメーターを指定できます。 このマクロの出力は、テンプレートの任意の場所に挿入できます。
py:defディレクティブは次の構文に従います-
このマクロは、「name」パラメーターの変数値でレンダリングできます。
このディレクティブは、次のような構文の別のバージョンでも使用できます-
次の例では、 root.py の* macro()コントローラーが、name1とname2の2つのキーを持つ *dict オブジェクトをmacrolテンプレートに送信します。
このマクロテンプレートには、グリーティングと呼ばれるマクロの定義が含まれています。 コントローラから受信したデータのグリーティングメッセージを生成するために使用されます。
ギアボックスを使用してサーバーを起動します
ブラウザに次のURLを入力して、macro()コントローラーを呼び出します-
次の出力はブラウザでレンダリングされます-
py:with
このディレクティブを使用すると、ローカル変数に式を割り当てることができます。 これらのローカル変数により、内部の表現がより冗長で効率的になります。
テンプレートのコンテキストデータでx = 50が与えられていると仮定すると、py:withディレクティブは次のようになります-
それは次の出力になります-
py:withディレクティブの代替バージョンも利用可能です-
次の例では、macro()コントローラーは、名前、phy、および数学キーを持つdictオブジェクトを返します。
テンプレートmacrolは、py:withディレクティブを使用して、phyおよびmathsキーの値を追加します。
ブラウザは、URL http://localhost:8080/macro に応じて次の出力をレンダリングします
構造操作ディレクティブ
コンテキストデータにbar = 'Bye’とすると、これは
コンテキストデータにbar = 'Bye’と指定すると、生成されます