如何在Jinja2模板中获取当前模板的文件名?

时间:2012-06-22 13:57:29

标签: python html jinja2

假设我使用return render_template('index.html', users=users)。是否可以在模板中获取文件名而无需在视图中明确发送它?

2 个答案:

答案 0 :(得分:13)

虽然没有记录,{{ self._TemplateReference__context.name }}会给出模板名称。在self._TemplateReference__context之后,您可以使用许多有趣的属性。

例如,您可以将其添加到最顶层的基本模板中:

        <meta name="template" content="{{ self._TemplateReference__context.name }}">

因此,查看页面源代码可以帮助您快速找到相关的模板文件。如果您不想公开此类信息,请将其作为测试环境的条件。

答案 1 :(得分:6)

如果您只需要基本名称,则可以使用{{ self }},它将返回包含模板基本名称的repr字符串,例如<TemplateReference 'view.html'>。您可以使用过滤器解析此内容,例如{{ self | quoted }}

@app.template_filter('quoted')
def quoted(s):
    l = re.findall('\'([^\']*)\'', str(s))
    if l:
        return l[0]
    return None

如果您需要完整路径,例如'/full/path/to/view.html',您可能想要继承模板。