Python Pyramid - добавление нескольких базовых шаблонов хамелеона - PullRequest
4 голосов
/ 08 июля 2011

Я использую эту процедуру, чтобы использовать базовый шаблон, из которого могут извлекаться другие шаблоны.

Как я могу создать несколько базовых шаблонов?

1 Ответ

3 голосов
/ 08 июля 2011

Просто зарегистрируйте их обоих:

from pyramid.renderers import get_renderer

def add_base_template(event):
    base = get_renderer('templates/base.pt').implementation()
    base2 = get_renderer('templates/base2.pt').implementation()
    event.update({'base': base, 'base2': base2})

И затем выберите, какой из них использовать в своем шаблоне для каждой страницы:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      metal:use-macro="base">
    <tal:block metal:fill-slot="content">
        My awesome content.
    </tal:block>
</html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      metal:use-macro="base2">
    <tal:block metal:fill-slot="content">
        Content on a totally different page.
    </tal:block>

Я считаю, что шаблон не имеетбыть целым элементом HTML, так что вы можете вместо этого развернуть 2 макроса в один и тот же окончательный шаблон

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal">
    <body>
        <div metal:use-macro="section1">
            <tal:block metal:fill-slot="content">
                Content for template "section1".
            </tal:block>
        </div>
        <div metal:use-macro="section2">
            <tal:block metal:fill-slot="content">
                Content for template "section2".
            </tal:block>
        </div>
    </body>
...