【问题标题】:Get Mako template from within Pyramid app view从 Pyramid 应用程序视图中获取 Mako 模板
【发布时间】:2013-03-08 17:38:36
【问题描述】:

我目前正在使用 Pyramid Web 框架,并使用 Mako 模板对其进行了配置。我知道我可以从视图方法 (Pyramid - Is it possible to render my mako template as a string within my view callable?) 中将模板呈现为字符串,但是,我想知道是否可以从视图中获取实际的模板对象,而不仅仅是呈现模板的函数.

查看 Pyramid 源代码,在 ma​​ko_templating.py 中,我看到默认的 TemplateLookup 类被 Pyramid 的查找方法覆盖。有没有办法主要访问这个查找对象,以便我可以使用它的一部分 get_template 函数?

感谢您对此问题的任何指导。

【问题讨论】:

    标签: python pyramid mako


    【解决方案1】:

    Pyramid 的渲染 API 不正式支持这种自省级别。话虽如此,这是一种方法。这是完全没有记录的、不受支持的、私有的等等。意思是,当它停止工作时不要来抱怨。

    from pyramid.mako_templating import IMakoLookup
    lookup = request.registry.queryUtility(IMakoLookup, name='mako.')
    tmpl = lookup.get_template('myapp:templates/foo.mako')
    
    opts = {} # rendering context
    result = tmpl.render_unicode(**opts)
    

    【讨论】:

    • 谢谢你的回答,迈克尔!最后,我决定使用项目配置设置实现一个单独的 Mako Templatelookup 实例。
    【解决方案2】:

    这对我有用:

    from pyramid.renderers import render
    sRenderedStuff = render('path/to/template.mak',dContext)
    

    一个示例用例是这样的:

    sEmailHtml = render("email/welcome_message_html.mak",dContext)
    

    在您的金字塔设置文件中使用以下行:

    mako.directories = your_app:templates
    

    your_app/templates/email/welcome_message.html 获取模板。所有inheritanceinclude 标记的工作方式与呈现给视图响应的模板一样。

    【讨论】:

    • 虽然这可行,但我的问题是针对使用已为应用程序配置的 TemplateLookup 实例。像这样调用render函数并没有考虑到现有的模板配置。
    猜你喜欢
    • 2013-03-28
    • 2011-09-20
    • 1970-01-01
    • 2015-01-06
    • 2013-01-17
    • 2012-10-25
    • 2012-03-02
    • 2013-05-14
    • 2016-11-03
    相关资源
    最近更新 更多