在Pyramid应用视图中获取Mako模板
我现在正在使用Pyramid这个网页框架,并且配置了Mako模板。我知道我可以在视图方法中把模板渲染成字符串(Pyramid - 是否可以在我的视图中将Mako模板渲染为字符串?),不过我想知道是否可以在视图中直接获取到实际的模板对象,而不仅仅是一个用来渲染模板的函数。
我查看了Pyramid的源代码,在mako_templating.py文件中,我发现默认的TemplateLookup类被重写了,并且有一个适用于Pyramid的查找方法。有没有办法访问这个查找对象,主要是为了使用它里面的get_template函数呢?
感谢你们对此问题的任何指引。
2 个回答
0
这个对我有效:
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
这个路径获取的。所有的 inheritance
和 include
标签的用法和在视图响应中渲染的模板是一样的。
4
这种深入检查的方式在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)