2012-06-22 108 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 }}"> 

這樣看着頁面的源代碼將幫助您快速找到相關的模板文件。如果您不想公開這類信息,請以測試環境爲條件。