2013-07-24 43 views
1

我一直在建設有燒瓶和SQLAlchemy的一個博客引擎,我已經到了一個地步,我有以下幾點:如何通過變量集合模板

  • 其中有一個左一個通用的基礎模板&右側邊欄以及 根據查詢動態生成的頁腳區域。
  • 許多在每個視圖中傳遞的變量,用於填充所述側邊欄和頁腳。

我的問題是:

是否存在被我可以通過一組變量燒瓶中的應用程序的每個視圖,而無需通過他們在render_template()調用的手段?

回答

1

做一套可用的模板變量的最簡單方法是將它們添加到flask.g

例如,您可能有g.left_sidebars,g.right_sidebarsg.footer,每個數組都包含您正在使用的變量。這些變量可能具有預先呈現的HTML(如果可能,可能會緩存以避免每次呈現它們),或者它們可能是要包含的子模板的名稱。

由於flask.g自動提供給模板,所以您只需在每個請求期間或在before_request處理程序中填充這些數組。

1

導入側邊欄和其他重複元素的傳統方式是導入到您的頁面模板繼承的佈局模板中。例如:

的layout.html:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    </head> 
    <body> 
    {% include sidebar.html %} 
    {% block body %} 
    {% endblock body %} 
    </body> 
</html> 

post.html:

{% extends "layout.html" %} 
{% block body %} 
    {{ post }} 
{% endblock %} 

你也可以創建這樣一個全球性的功能:

def createNav(): 
    nav = ''' 
     <ul class="nav"> 
      <li><a href="/">Home</a></li> 
      <li><a href="/about">About</a></li> 
     </ul> 
    ''' 
    return nav 

#make function available inside jinja template 
app.jinja_env.globals.update(createNav=createNav) 

然後請撥打電話:

post.html:

{% extends "layout.html" %} 
{% block body %} 
    {{ createNav() }} 
    {{ post }} 
{% endblock %} 
+0

你的回答很好,app.jinja_env.globals部分會有所幫助。米格爾斯儘管簡短地回答了我直接尋找的內容。謝謝!! –