2013-12-09 2 views
3

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

Макет файла

<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> 

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

ответ

1

Чтобы удалить тег один должен использовать Таля: проп-тег:

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

<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 не является частью результата. Read the doc.

3

Существует альтернатива использованию tal:omit-tag (что я нахожу раздражающе запутанным - не раз я много минут пытался выяснить, почему определенный тег не появляется на выходе, когда он явно присутствует в шаблоне, только для найти tal:omit-tag аккуратно заправленные в дальний угол): если вы используете XML-теги с 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="..." /> 
+0

я наткнулся вас, потому что я считаю, исчезая Div, чтобы сбить с толку. Альтернатива тега пространства имен намного чище. – umeboshi

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