2012-01-05 61 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它可以很容易地处理涡轮机应用程序内的菜单和导航栏。