20

说我用return render_template('index.html', users=users). 是否可以在模板中获取文件名而不在视图中显式发送它?

4

2 回答 2

20

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

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

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

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

于 2016-10-31T16:58:35.397 回答
8

如果您只需要基本名称,您可以使用{{ 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',您可能需要子类化模板。

于 2012-09-06T14:58:33.543 回答