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: match часто сложнее, чем вам нужно, я предлагаю вам взглянуть на реализацию верхнего и нижнего колонтитула внутри шаблона быстрого запуска, они используют более простой способ управления повторно используемыми частями шаблона.
Для конкретного случая меню вы также можете взглянуть на tgext.menu , с которым довольно просто работать с меню и панелями навигации в приложениях TurboGears.