2012-01-05 3 views
1

Хорошо, я иду из Джанго, поэтому, пожалуйста, извините меня, если то, что я пишу, не имеет смысла. Я пытаюсь «переопределить» часть моего шаблона в турбогерах с помощью genshi. До сих пор я только попробовал р: директиву матча без успеха:Теги блока в 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> за пределы DIV меню. Что я делаю не так?

ответ

2

Genshi py: матч немного суровый, чтобы его понять. Документация TurboGears2 достаточно хорошо объясняет эту концепцию: «С учетом выражения XPath он находит и заменяет каждый элемент в шаблоне, который соответствует выражению, - с содержимым элемента, содержащего совпадение py:».

Это означает, что на самом деле элемент, который имеет совпадение py:, заменяет тот, у которого его нет. Так что, если вы хотите поместить в меню внутри мастера из шаблона ребенка вы должны инвертировать два:

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> 

Использование ру: совпадение часто более сложное, чем то, что вам нужно, я предлагаю вам взглянуть на реализацию заголовка и нижнего колонтитула в шаблоне quickstart, они используют более простой способ управления шаблоном многократного использования ртс.

Для конкретного случая меню вы также можете взглянуть на tgext.menu, поэтому он очень удобен в работе с меню и навигаторами в приложениях для турбодвигателей.

Смежные вопросы