1

わかりました、私は Django から来ているので、私が書いたことが意味をなさない場合はご容赦ください。genshi を使用してターボギアのマスター テンプレートの一部を「オーバーライド」しようとしています。これまでのところ、成功していない py:match ディレクティブのみを試しました:

マスター テンプレート:

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

子テンプレート:

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

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

4

1 に答える 1

2

Genshi py:match は、理解するのが少し難しいです。TurboGears2 のドキュメントでは、この概念について非常によく説明されています。

これは、実際には py:match を持つ要素が、それを持たない要素を置き換えることを意味します。したがって、メニューを子テンプレートからマスター内に配置する場合は、2 つを反転する必要があります。

主人:

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

子:

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

多くの場合、py:match の使用は必要以上に複雑です。クイックスタート テンプレート内のヘッダーとフッターの実装を確認することをお勧めします。再利用可能なテンプレート パーツをより簡単に管理する方法を使用しています。

メニュー固有のケースについては、tgext.menu を参照することもできますこれにより、ターボギア アプリケーション内のメニューとナビゲーション バーを非常に簡単に処理できます。

于 2012-01-06T00:45:01.883 に答える