Конфигурируемая головка с нагрузкой хамелеона

При использовании хамелеона я могу заменить элемент из базового шаблона, используя концепцию слота. Где вы определяете слот и заполняете его, используя другой тег. Поскольку в голове нет элемента контейнера, как можно добавить элементы в голову?:

Файл макета

<html>
<head>
  <div metal:define-slot="extra_head"></div>
</head>
<body>
  ...
</body>
</html>

Шаблон контента, в котором нужно указать лишнюю голову.

<html metal:use-macro="load: main.pt">
<div metal:fill-slot="extra_head">
  <script type="text/javascript" src="http://example/script.js"></script>
</div>
...
</html>

Это отображается в:

<html>
<head>
  <div metal:fill-slot="extra_head">
    <script type="text/javascript" src="http://example/script.js"></script>
  </div>
</head>
<body>
  ...
</body>
</html>

Но в голове нет тега контейнера, так как можно определить слот для добавления вещей в голову?

2 ответа

Есть альтернатива использованию tal:omit-tag (что я нахожу досадно сбивающим с толку - не раз я тратил много минут, пытаясь выяснить, почему определенный тег не появляется в выводе, когда он явно присутствует в шаблоне, только чтобы найти tal:omit-tag аккуратно спрятан в дальнем углу): если вы используете tal: а также metal: пространства имен они не появятся в выводе:

<html>
    <head>
        <metal:my-slot define-slot="extra_head"></metal:my-slot>
    </head>
    <body>
        ...
    </body>
</html>

и в дочернем шаблоне:

<metal:template use-macro="load: main.pt">
    <metal:any-descriptive-name fill-slot="extra_head">
        <script type="text/javascript" src="http://example/script.js"></script>
    </metal:any-descriptive-name>
    ...
</metal:template>

Обратите внимание, что шаблон становится намного более читабельным и информативным и не содержит странных вещей, таких как <div> внутри <head>:)

Вы также можете опустить tal: а также metal: префиксы для атрибутов при использовании тегов пространства имен, так

<h1 tal:condition="..." tal:content="..." tal:omit-tag="">Hi there! Bogus content for added confusion!</h1>

становится

<tal:greeting condition="..." content="..." />

Для удаления тега нужно использовать tal:omit-tag:

В шаблоне контента используйте:

<html metal:use-macro="load: main.pt">
<div metal:fill-slot="extra_head" tal:omit-tag="">
  <script type="text/javascript" src="http://example/script.js"></script>
</div>
...
</html>

Div не является частью результата. Прочитайте документ.

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