Блокировать теги в турбогенераторах / генши (py: match)? - PullRequest
1 голос
/ 06 января 2012

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

1 Ответ

2 голосов
/ 06 января 2012

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.

...