如何在 Jinja2 模板中获取当前模板的文件名?
Posted
技术标签:
【中文标题】如何在 Jinja2 模板中获取当前模板的文件名?【英文标题】:How to get file name of current template inside Jinja2 template? 【发布时间】:2012-06-24 20:05:26 【问题描述】:假设我使用return render_template('index.html', users=users)
。是否可以在模板中获取文件名而不在视图中显式发送它?
【问题讨论】:
只是想知道:你想做什么? (对答案感兴趣) 我第二个@JeffTratner。你想做什么? 我想根据文件名向正文添加一个类。例如,如果它是“user-details.html”模板,我想添加一个相应的类 以通过javascript正确管理它。 可以在警告中使用,告诉我需要修复的文件。 【参考方案1】:虽然没有记录, self._TemplateReference__context.name
会给出模板名称。在self._TemplateReference__context
之后,您可以使用许多有趣的属性。
例如,您可以将其添加到最顶层的基本模板中:
<meta name="template" content=" self._TemplateReference__context.name ">
因此,查看页面源代码将帮助您快速找到相关的模板文件。如果您不想暴露此类信息,请以测试环境为条件。
【讨论】:
如果当前模板是继承的,那么 (Jinja2.10) 这会给你根模板的名称,而不是当前模板。【参考方案2】:如果您只需要基本名称,您可以使用 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”,您可能需要子类化模板。
【讨论】:
它不起作用。当我尝试您的解决方案时,会出现此错误: TemplateAssertionError: no filter named 'quoted' @renatov:你在哪里有@app.template_filter('quoted')?过滤器是否在您的 Flask 应用中正确注册?以上是关于如何在 Jinja2 模板中获取当前模板的文件名?的主要内容,如果未能解决你的问题,请参考以下文章