特别是我想使用pystache,但是另一个模板引擎的指南应该足以设置它。
如果我理解正确,我必须在我的金字塔应用程序的__init__.py
中注册渲染器工厂。
config = Configurator(settings=settings)
config.add_renderer(None, 'pystache_renderer_factory')
现在我需要创建渲染器工厂并且不知道如何。
即使我发现the documentation有关如何添加模板引擎的信息,我也无法设置它。
答案 0 :(得分:5)
最后,我可以按照本指南添加pystache模板引擎:
我做了什么:
创建了文件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的源代码中,有json
和jsonp
渲染器的非常简单的实现。请注意它们如何提供相当独特的方法来实现所需的接口。每个工厂都接受一个info
对象,并返回一个接受value
和system
个对象的可调用对象。
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?。