2011-01-12 81 views
19

我有五頁具有相同的頁面佈局和結構,但有一些不同的顏色,文本等,所以這是一個理想的模板環境。我決定使用Jinja2,可能還有燒瓶。我已經閱讀了文檔和一些在線教程,這些教程解釋了很多關於如何使用頁面上的模板進行操作的知識,但沒有涉及如何將變量發送到頁面。你在哪裏將變量存儲在jinja中?

  • 你在哪裏存儲頁面特定變量?
  • 代碼如何知道哪個頁面已被請求以及要加載哪些變量?
+1

燒瓶是一個不錯的選擇。它的教程或多或少地回答你的問題:http://flask.pocoo.org/docs/quickstart/#rendering-templates。另請注意`@ app.route`如何定義URL。 – 9000 2011-01-12 01:29:40

+0

謝謝 - 所以我會爲每個頁面有一個python腳本,在每個python腳本中聲明變量,然後將它們傳遞給template.render? – 2011-01-12 01:40:53

回答

48

這裏的基本用法:

首先創建一個模板

>>> from jinja2 import Template 
>>> template = Template('Hello {{ name }}!') 

然後使其通過變量

>>> template.render(name='John Doe') 
u'Hello John Doe!' 

通常你會想從文件加載的模板,而不是碼。這是更高效和優化,並允許模板繼承:

from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 

這將尋找yourapplication Python包的templates文件夾內的模板,安裝在Python路徑。您可以使用其他加載程序從特定文件系統或其他位置加載。

然後你就可以加載模板:

template = env.get_template('mytemplate.html') 
print template.render(the='variables', go='here') 

當使用燒瓶這一切都是爲您配置,所以你可以用瓶的render_template功能,它會已經尋找你的應用程序的templates子文件夾:

from flask import render_template 

@app.route('/hello/') 
def hello(name=None): 
    return render_template('hello.html', name=name) 

注模板變量(也稱爲上下文)被傳遞到render_template

Jinja有漂亮的good documentation。請閱讀。隨意提出進一步的問題。