Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Jinja2模板中获取当前模板的文件名?_Python_Html_Jinja2 - Fatal编程技术网

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

Python 如何在Jinja2模板中获取当前模板的文件名?,python,html,jinja2,Python,Html,Jinja2,假设我使用返回渲染模板('index.html',users=users)。是否可以在不在视图中显式发送文件名的情况下在模板中获取文件名?如果只需要基本名称,可以使用{{self}返回包含模板基本名称的repr字符串,例如。你可以用一个过滤器来解析它,例如,{{self | quoted}} @app.template_filter('quoted') def quoted(s): l = re.findall('\'([^\']*)\'', str(s)) if l:

假设我使用
返回渲染模板('index.html',users=users)
。是否可以在不在视图中显式发送文件名的情况下在模板中获取文件名?

如果只需要基本名称,可以使用
{{self}
返回包含模板基本名称的repr字符串,例如
。你可以用一个过滤器来解析它,例如,
{{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”,您可能需要对模板进行子类化。

尽管没有文档记录,
{{self.\u templaterreference\uu context.name}
将给出模板名称。在
self.\u templaterreference\u context
之后,您可以使用许多相互测试属性

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

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


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

只是想知道:您想做什么?(对答案感兴趣)我支持JeffTratner。您想做什么?我想根据文件名向正文中添加一个类。例如,如果它是“user details.html”模板,我想添加一个相应的类来通过javascript正确地管理它。可以在警告中使用它来告诉文件我需要修复。它不起作用。当我尝试您的解决方案时,出现了以下错误:TemplateAssertionError:没有名为'quoted'的筛选器@renatov:您在哪里有@app.template_筛选器('quoted')?过滤器是否已在Flask应用程序中正确注册?如果继承了当前模板,则(Jinja2.10)将为您提供根模板的名称,而不是当前模板。