我想在我的金字塔应用程序中使用 pystache 提供的基于类的视图,但我不完全确定如何正确集成这两者。我已经读过这个,但它没有谈到使用基于类的视图。
如果我想使用基于类的视图,我将如何为 pystache 创建一个新的渲染器?有人可以帮我吗?
此外,虽然我已经知道 mustache 是如何工作的,但我似乎无法找到有关 python 实现 (pystache) 的太多信息。有人可以在这里指出我正确的方向吗?
我想在我的金字塔应用程序中使用 pystache 提供的基于类的视图,但我不完全确定如何正确集成这两者。我已经读过这个,但它没有谈到使用基于类的视图。
如果我想使用基于类的视图,我将如何为 pystache 创建一个新的渲染器?有人可以帮我吗?
此外,虽然我已经知道 mustache 是如何工作的,但我似乎无法找到有关 python 实现 (pystache) 的太多信息。有人可以在这里指出我正确的方向吗?
实现一个MustacheRendererFactory
:
class MustacheRendererFactory(object):
def __init__(self, info):
self.info = info
def __call__(self, value, system):
package, filename = resolve_asset_spec(self.info.name)
template = os.path.join(package_path(self.info.package), filename)
template_fh = open(template)
template_stream = template_fh.read()
template_fh.close()
return pystache.render(template_stream, value)
更新您的配置器设置,可能在__init__.py
:
def main(global_config, **settings):
config = Configurator(settings=settings)
# ...
# Use Mustache renderer
config.add_renderer(name='.mustache',
factory='myapp.mustacherenderer.MustacheRendererFactory')
# ...
在您的视图中使用:
@view_config(route_name='myview', renderer='myapp:templates/notes.mustache')
def my_view(request):
# ...
在金字塔中,渲染器视图参数是一个字符串,它不能是一个类。因此,没有办法只说
@view_config(route_name='someroute', renderer=MyClassBasedView)
最简单的解决方案可能是手动调用渲染器。
return Response(pystache.render(ViewClass))
如果你真的想使用金字塔渲染器系统,你可以使用“类的点路径+扩展”形式的假渲染器字符串。然后渲染器工厂将解析虚线路径以获取类并返回渲染器。
我必须说我不确定我是否理解您将如何在金字塔中使用基于 pystache 类的视图。使用返回值的方法定义类似乎比返回字典更复杂,并且在这些方法中计算值而不是在金字塔视图中进行计算可能会导致代码更加混乱。不过,继承可能有一些我没有考虑过的优点。