2014-02-16 51 views
0

我可以有一個路線來呈現可以在另一個模板中使用的模板嗎?從模板調用路線

我想象像

@app.route('/tags/') 
def tags(): 
    return render_template('tags.html', tags=create_tags()) 

然後以某種方式調用來自不同的模板的路線。

<h2>Tags</h2> 
{{ render('/tags/') }} 

回答

0

路徑不呈現模板,函數做。所有的路線都是指向一個功能的網址。所以,對我來說顯而易見的解決方案是有一個返回渲染標籤模板函數:

def render_tags_template(): 
    return render_template('tags.html', tags=create_tags()) 

然後,我們希望將功能與URL關聯「/標籤」

app.add_url_rule('/tags', endpoint='tags', view_func=render_tags_template) 

我們也希望能夠從我們的模板中訪問此功能。通過另一個請求通過url訪問它很可能是ajax的工作。所以我們必須將render_tags_template放入模板上下文中。

{{render_tags_template()}} 

,如果你不想render_tags_template明確地傳遞,你可以將其添加爲模板全球:

app.jinja_env.globals['render_tags_template'] = render_tags_template 

和使用

render_template('some_random_template.html', render_tags_template=render_tags_template 
在some_random_template.html

然後它可以在您的所有模板中自由使用,而無需明確傳遞。

取決於你的實際上試圖做什麼,只需包括tags.html可能是最好的和最簡單的解決方案。使用一個函數來生成內容會給你更多的控制權和靈活性。

+0

此外,如果您只想從模板中訪問此功能,則無需添加url規則。如果您希望用戶轉到/ tags並查看tags.html呈現的獨奏,或者提供ajax api以使用javascript獲取模板,則可以添加url_rule。 – ramabodhi

0

您可以在模板中包含tags.html模板。

{% include "tags.html" %} 

您必須將tags傳遞給您的模板,但這是實現它的方法。