【问题标题】:Using parent template in pyramid framework在金字塔框架中使用父模板
【发布时间】:2014-04-14 18:53:31
【问题描述】:

我正在学习金字塔框架。

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

但它们都有相同的头部内容。

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

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

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

但我不喜欢这种方法。

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

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

    Chameleon 中的标准方式如下所示。

    首先,一个基础模板,ma​​in.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依次使用模板。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-05-22
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 2015-03-23
        • 2013-02-26
        • 2012-09-18
        • 2019-07-19
        • 1970-01-01
        相关资源
        最近更新 更多