Проверьте, является ли%def пустым в шаблоне mako

У меня есть мако шаблон, как

<%def name="header()"></%def>

<header class="header">
  ${self.header()}
</header>

что другие шаблоны наследуют от. Теперь некоторые шаблоны, которые наследуют, не будут определять заголовок. В этом случае я не хочу <header> тег, чтобы появиться.

Как я могу проверить, был ли переименованный заголовок def перезаписан (или все еще пуст)?

1 ответ

Вы можете использовать встроенный capture() функция (объясненная здесь), чтобы собрать вывод в переменную и затем проверить его с помощью % if заявление. Вот пример генерации правильного вывода:

<%def name="header()"></%def>

<%
  h = capture(self.header)
%>
% if h:
<header class="header">
  ${h}
</header>
% endif

Это не очень элегантно и может немного замедлить ваш шаблон. Но кого это волнует? Это решает проблему:)

Другие вопросы по тегам