您想在这里避免使用 Pyramid 事件是对的。 Pyramid 的默认模板语言是 Chameleon,您似乎正在使用它,但您也可以轻松地使用 Mako 或其他模板语言。要点是:在 Pyramid 中没有定义父模板的标准方法,因为它不关心您使用哪种模板语言。
Chameleon 中的标准方式如下所示。
首先,一个基础模板,main.pt:
<html>
<head>
Something generic in here...
</head>
<body>
<h1>${document.title}</h1>
<div id="content">
<metal:content define-slot="content" />
</div>
</body>
</html>
一个示例child.pt,它首先加载父模板,然后填充content槽:
<metal:main use-macro="load: main.pt">
<p metal:fill-slot="content">${structure: document.body}<p/>
</metal:main>
一个可能的金字塔视图函数:
@view_config(route_name='view_document', renderer='child.pt')
def document_view(request):
foo = Document(title="bar", content="silly example")
return {'document': foo}
当然,这假设我已经在别处定义了一个 Document 类。 Pyramid 代码中只提到了子模板。我的 view_document 函数将文档对象 foo 传递给 child.pt 模板,然后该模板调用 main.pt依次使用模板。