2012-01-05 4 views
1

私はDjangoから来ていますので、私が書いていることが意味をなさないならば、私を許してください。私はgenshiを使ってターボエンジンでマスターテンプレートの一部を "上書き"しようとしています。これまでのところ私はPYを試してみた:なし成功と一致ディレクティブ:turbogears/genshiのブロックタグ(py:match)?

マスターテンプレート:

<div id="menu"> 
    <div class="menu-items" py:match="topmenu" py:attrs="select('@*')"> 
     ${select('*')} 
    </div> 
</div> 

子テンプレートを:

<topmenu> <span> HELLO! </span> </topmenu> 

これは、メニューのdivの<span> HELLO! </span>外をレンダリングします。私は間違って何をしていますか?

答えて

2

Genshi py:マッチはちょっとわかりにくいです。 TurboGears2のドキュメントでは、その概念を非常にうまく説明しています。"XPath式を指定すると、式に一致するテンプレート内のすべての要素がpy:matchを含む要素の内容と置き換えられます。

これは、実際にはpy:matchを持つ要素が、それを持たない要素を置き換えることを意味します。

MASTER::

<body py:match="body" py:attrs="select('@*')"> 
    <topmenu id="menu-items"></topmenu> 
</body> 

がCHILD:

<body> 
    <div py:match="topmenu" py:attrs="select('@*')"><span>item1</span></div> 
</body> 

PYを使用して、子テンプレートからマスター内のメニューを入れたいのであれば、あなたは2を反転する必要があります。マッチはしばしば必要なものよりも複雑です。クイックスタートテンプレートのヘッダーとフッターの実装を見てみることをお勧めします。再利用可能なテンプレートPAを管理するための簡単な方法を使用しますrts。

メニュー固有のケースについては、tgext.menuを見ることもできます。これは、ターボギアアプリケーション内のメニューとナビゲータを非常に扱いやすくします。