在金字塔框架中使用父模板

2024-10-05 14:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习金字塔框架。在

到目前为止,我能够为每个视图创建一个单独的模板。在

但他们都有相同的头脑内容。在

那么,在金字塔中定义父模板最标准的方法是什么?在

我发现有一种方法可以通过金字塔事件来实现:

@subscriber(BeforeRender)
def add_base_template(event):
    base = get_renderer('templates/base.pt').implementation()
    event.update({'base': base}) 

但我不喜欢这种方法。在


Tags: 方法框架eventadd视图模板内容base
2条回答

这个问题在讨论布局的金字塔教程中得到了回答。您没有要求宏,但它们是您当前正在探索的主题的一部分。在

这里回答了为什么使用布局是一个先进的概念。但是这个想法的实现可能会有所不同,这取决于项目的需求和开发人员的技能。在

我在我自己的项目中使用布局,不需要任何变色龙的知识来管理加载模板。它封装在金字塔附加组件包pyramid_chameleon中。在

你应该避免在这里使用金字塔事件。Pyramid的默认模板语言是Chameleon,您似乎正在使用它,但您也可以轻松地使用Mako或其他模板语言。重点是:在金字塔中没有定义父模板的标准方法,因为它不关心您使用哪种模板语言。在

变色龙的标准方法如下所示。在

首先,一个基本模板,主.pt

<html>
  <head>                                                   
    Something generic in here...
  </head>
<body>
<h1>${document.title}</h1>

<div id="content">
  <metal:content define-slot="content" />
</div>
</body>
</html>

一个例子儿童.pt,它首先加载父模板,然后填充内容槽:

^{pr2}$

可能的金字塔视图功能:

@view_config(route_name='view_document', renderer='child.pt')
def document_view(request):
    foo = Document(title="bar", content="silly example")
    return {'document': foo}

当然,这假设我在其他地方定义了一个文档类。金字塔代码中只提到了子模板。我的view_document函数将document对象foo传递到儿童.pt模板,然后调用主.pt依次设置模板。在

相关问题 更多 >