2012-06-22 111 views
9

说我使用return render_template('index.html', users=users)。是否可以在模板中获取文件名,而不必在视图内部明确发送它?如何获取Jinja2模板中当前模板的文件名?

+0

只是想知道:你想做什么? (感兴趣的回答) –

+0

我第二@JeffTratner。您想做什么? – Apalala

+0

我想根据文件名添加一个类到主体。例如,如果它是“user-details.html”模板,我想添加一个相应的类来通过javascript来正确管理它。 –

回答

5

如果您只需要基本名称,则可以使用{{ 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”你可能要继承模板。

+0

它不起作用。当我尝试你的解决方案时,会出现此错误:TemplateAssertionError:没有名为'quoted'的过滤器 – renatov

+0

@renatov:你在哪里有@app.template_filter('quoted')?过滤器是否已正确注册到Flask应用程序? – PartialOrder

5

尽管未公开,{{ self._TemplateReference__context.name }}将给出模板名称。并且在self._TemplateReference__context之后可以使用一些间隔属性。

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

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

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