2013-02-08 80 views
2

如何在jinja2中「包含標籤」。我需要在基本模板中輸出一組文章。他們在兒童工作。Flask和jinja2包含標籤

views.py

Articles.query.filter_by(name=name).first() 

base.html文件

{% block content %} 
    Content base 
{% endblock %} 
---{{ this_articles_tag }}---- 

children.html

{% extends 'base.html' %} 
{% block content %} 
    Content children 
{% endblock %} 
---{{ output Articles }}---- 

的Django在這個「包括標籤「,如何在jinja2中做到這一點? (不使用context_processor)

回答

1

如果需要在模板中包含其他模板,只需在Jinja中使用include即可。但是如果你正在談論模板標籤(在Django中我記得我很喜歡它們),那麼在Flask中只有你提到的context_processor纔是可行的。我認爲這根本不是一件壞事。

編輯:讓一個函數指出在documentation註冊背景處理器

最簡單的方法。

但是,如果你想要的東西更花哨,像動態加載,否則你會從不同的地方加載functrion,那麼你可以定義自己的裝飾功能,基本上包返回字典的功能:

def example_templatetag(): 
    def get_something(): 
    return get_want_you_want_from_db() 
    return dict(get_something=get_something) 

然後在其中創建您的水壺的應用對象,你可以很容易地註冊該功能:

app.context_processor(example_templatetag) 

然後你可以使用模板是這樣的:

{% set data_you_wanted=get_something() %} 
{{ data_you_wanted }} 

但是,也許你在文檔中提到的方法將是綽綽有餘;)

+0

Context_protsessor可以註冊爲一個函數,並調用它的模板嗎?我不會在所有頁面上使用。 – Silent 2013-02-08 13:23:06

+0

在我的回答中添加了兩種方法來獲取Jinja模板中的功能。所以這個函數被註冊爲一個上下文處理器。然後它真的變得像Django中的templatetag :) – 2013-02-08 13:55:48

+1

謝謝。作爲另一種解決方案可以使用基於類的視圖。在基類中定義上下文。 – Silent 2013-02-08 16:14:14