2010-06-16 46 views
4

創建模板時,我通常有3個獨立的部分(標題,正文,頁腳),我將這些字符串傳遞給Web服務器(本例中爲CherryPy)。Jinja2多部分模板問題

我的第一種方法是如下...

from jinja2 import Environment, FileSystemLoader 
env = Environment(loader=FileSystemLoader('')) 

tmpl = env.get_template('Body.html') 
page_body = tmpl.render() 

tmpl = env.get_template('Header.html') 
page_header = tmpl.render() 

tmpl = env.get_template('Footer.html') 
page_footer = tmpl.render() 

page_code = page_header + page_body + page_footer 

但這包含重複的代碼,所以我的下一個方法是...

def render_template(html_file): 
    from jinja2 import Environment, FileSystemLoader 
    env = Environment(loader=FileSystemLoader('')) 
    tmpl = env.get_template(html_file) 
    return tmpl.render() 

page_header = render_template('Header.html') 
page_body = render_template('Body.html') 
page_footer = render_template('Footer.html) 

但是,這意味着每個零件創建在自己的環境中 - 這可能是一個問題嗎?這種方法還有其他缺點嗎?

我已經選擇了3部分的子模板方法,因爲我認爲它可能更靈活(也更容易遵循),但我可能是錯的。任何人都想說服我,使用頁眉,頁腳和頁腳塊可能會更好?

任何意見,將不勝感激。 Alan

回答

11

如果你不想做模板繼承,你考慮過include

{% include 'header.html' %} 
    Body 
{% include 'footer.html' %} 
+0

這很可能是答案 - 前段時間我讀了'include',但忽略了它作爲解決我的問題的方法。非常感謝。 – 2010-06-16 12:10:46