如何在Pyramid中更改模板引擎?

时间:2011-11-17 15:20:25

标签: python pyramid template-engine mustache

特别是我想使用pystache,但是另一个模板引擎的指南应该足以设置它。

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

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

现在我需要创建渲染器工厂并且不知道如何。

即使我发现the documentation有关如何添加模板引擎的信息,我也无法设置它。

3 个答案:

答案 0 :(得分:5)

最后,我可以按照本指南添加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')

工作:)

答案 1 :(得分:2)

add_renderer的第二个参数应该是一个实现“添加新渲染器”中显示的接口的类。金字塔将采用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

答案 2 :(得分:2)

请注意this answer在使用脚手架创建Pyramid项目之前效果很好。完成此操作后,在构建Pystache / Mustache_Renderer_Factory时,此相关答案将更有用:How to integrate pystache with pyramid?