在Pyramid应用视图中获取Mako模板

2 投票
2 回答
614 浏览
提问于 2025-04-17 19:40

我现在正在使用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 这个路径获取的。所有的 inheritanceinclude 标签的用法和在视图响应中渲染的模板是一样的。

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)

撰写回答