2012-01-05 67 views
1

好的,我是從Django來的,所以請原諒我寫的東西沒有意義。我試圖用genshi在turbogears中「覆蓋」我的主模板的一部分。到目前爲止,我只試過潘岳:匹配指令,但沒有成功: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> 

這使得<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> 

子:

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

用py:匹配通常比您需要的更復雜,我建議您查看快速入門模板中的頁眉和頁腳實現,它們使用更簡單的方法來管理可重用模板頁面RTS。

對於菜單特定的情況下,你也可以看看tgext.menu它可以很容易地處理渦輪機應用程序內的菜單和導航欄。