我有多个相互包含的模板,例如:
t1.html:
...
<%include file="t2.html" args="docTitle='blablabla'" />
...
t2.html:
<%page args="docTitle='Undefined'"/>
<title>${docTitle}</title>
...
我想要做的是确定t1包含t2(或另一个,所以我可以使用它的名字)。文档中描述的特定方式没有引起我的注意,我可以通过另一个参数(例如pagename ='foobar'),但感觉更像是黑客。
有没有办法实现这一点,使用简单的.render(blabla)调用来呈现页面?
答案 0 :(得分:1)
据我所知,mako没有提供有关“父”模板的任何信息。此外,需要注意从传递给包含文件的上下文中删除任何信息。
因此,我看到的唯一解决方案是使用CPython堆栈,找到最近的mako模板框架并从中提取所需信息。然而,这可能既缓慢又不可靠,我建议明确传递名称。它还依赖于未记录的mako功能,这些功能可能会在以后发生变化。
这是基于堆栈的解决方案:
在模板中:
${h.get_previous_template_name()} # h is pylons-style helpers module. Substitute it with cherrypy appropriate way.
在helpers.py中(或w / e适用于cherrypy):
import inspect
def get_previous_template_name():
stack = inspect.stack()
for frame_tuple in stack[2:]:
frame = frame_tuple[0]
if '_template_uri' in frame.f_globals:
return frame.f_globals['_template_uri']
这将返回完整的uri,但是,像't1.html'。调整它以满足您的需求。