加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Mako模板:如何找到包含当前模板的模板的名称?

发布时间:2020-12-20 13:20:42 所属栏目:Python 来源:网络整理
导读:我有多个相互包含的模板,例如: t1.html: ...%include file="t2.html" args="docTitle='blablabla'" /... t2.html: %page args="docTitle='Undefined'"/title${docTitle}/title... 而我想要做的是确定t1包含t2(或另一个,所以我可以使用它的名字).文档中描
我有多个相互包含的模板,例如:

t1.html:

...
<%include file="t2.html" args="docTitle='blablabla'" />
...

t2.html:

<%page args="docTitle='Undefined'"/>
<title>${docTitle}</title>
...

而我想要做的是确定t1包含t2(或另一个,所以我可以使用它的名字).文档中描述的特定方式没有引起我的注意,我可以通过另一个参数(例如pagename =’foobar’),但感觉更像是一个黑客.

有没有办法实现这一点,使用简单的.render(blabla)调用来呈现页面?

解决方法

据我所知,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’.调整它以满足您的需求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读