【问题标题】:How to change the template engine in Pyramid?如何更改 Pyramid 中的模板引擎?
【发布时间】:2011-11-17 15:20:25
【问题描述】:

我特别想使用pystache,但任何其他模板引擎的指南都应该足以设置它。

如果我理解正确,我必须在我的金字塔应用程序的__init__.py 中注册渲染器工厂。

config = Configurator(settings=settings)
config.add_renderer(None, 'pystache_renderer_factory')

现在我需要创建渲染器工厂,不知道怎么做。

虽然我找到了the documentation关于如何添加模板引擎,但我没有设法设置它。

【问题讨论】:

    标签: python pyramid template-engine mustache


    【解决方案1】:

    最后我能够按照本指南添加 pystache 模板引擎:

    https://groups.google.com/forum/#!searchin/pylons-discuss/add_renderer/pylons-discuss/Y4MoKwWKiUA/cyqldA-vHjkJ

    我做了什么:

    创建文件 mustacherenderer.py:

    from pyramid.asset import abspath_from_asset_spec 
    import pystache
    import os 
    
    def pystache_renderer_factory(info):
        template = os.path.join(abspath_from_asset_spec('myproj:templates', False),
                                info.name)
        f = open(template) 
        s = f.read() 
        f.close() 
        def _render(value, system):
            return pystache.render(s, value)
        return _render
    

    将此添加到__init__.py

    config.add_renderer('.pmt', 'myproj.mustacherenderer.pystache_renderer_factory')
    

    工作:)

    【讨论】:

      【解决方案2】:

      add_renderer 的第二个参数应该是一个实现“添加新渲染器”中所示接口的类。 Pyramid 将采用 pystache_renderer_factory 并尝试导入它,因此在您的代码中,import pystache_renderer_factory 行必须有效。这个例子永远不会解析为一个类,只有一个模块或包,所以你必须先修复它。它应该类似于mypackage.pystache_renderer_factory

      学习如何编写渲染器的最佳方法可能是查看一些已经编写好的。特别是 pyramid_jinja2 包,或者在 Pyramid 的源代码中有 jsonjsonp 渲染器的非常简单的实现。注意它们都提供了相当独特的方法来实现所需的接口。每个工厂都接受一个info 对象,并返回一个接受valuesystem 对象的可调用对象。

      https://github.com/Pylons/pyramid_jinja2/blob/master/pyramid_jinja2/init.py#L260

      https://github.com/Pylons/pyramid/blob/master/pyramid/renderers.py#L135

      【讨论】:

      • 感谢您的回答。我已经查看了源代码,希望有更多的分步指南(因为我是 python 和金字塔的新手)。在我发布问题后不久找到了一个简单的指南。
      【解决方案3】:

      请注意,this answer 可以正常工作,直到您使用脚手架创建 Pyramid 项目。一旦你这样做了,这个相关的答案将在构建你的 Pystache/Mustache_Renderer_Factory 时更加有用:How to integrate pystache with pyramid?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 2011-11-09
        • 2014-02-28
        • 1970-01-01
        • 2012-11-11
        • 2020-10-19
        • 1970-01-01
        相关资源
        最近更新 更多