Python Pyramid - Add multiple chameleon base templates
Question: I am using
[this](http://docs.pylonsproject.org/projects/pyramid_cookbook/dev/templates.html#using-
a-beforerender-event-to-expose-chameleon-base-template) procedure to use a
base template which the other templates can derive from.

How can I create multiple base templates?


Answer: Just register them both:

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

And then choose which to use in your template for each page:

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

I believe a template doesn't have to be the whole HTML element, so you could
instead expand 2 macros into the same final template

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

