Django的模板渲染 render 機制

2021-10-10 16:39:51 字數 3178 閱讀 5314

一旦你建立乙個 template 物件,你可以用 context 來傳遞資料給它。 乙個context 是一系列變數和它們值的集合。

context 在 django 裡表現為 context 類,在 django.template 模組裡。它的建構函式帶有乙個可選的引數: 乙個字典對映變數和它們的值。 呼叫 template 物件 的 render() 方法並傳遞 context 來填充模板:

>>> from django.template import context, template

>>> t = template('my name is }.')

>>> c = context()

>>> t.render(c)

u'my name is nowamagic.'

字典和contexts

python 的字典資料型別就是關鍵字和它們值的乙個對映。 context 和字典很類似, context 還提供更多的功能。

變數名必須由英文本元開始 (a-z或a-z)並可以包含數字字元、下劃線和小數點。 (小數點在這裡有特別的用途,稍後我們會講到)變數是大小寫敏感的。

下面是編寫模板並渲染的示例:

>>> from django.template import template, context

>>> raw_template = """dear },

...... thanks for placing an order from }. it's scheduled to

... ship on }.

......

... your warranty information will be included in the packaging.

...

... you didn't order a warranty, so you're on your own when

... the products inevitably stop working.

...

...... sincerely,

}"""

>>> t = template(raw_template)

>>> import datetime

>>> c = context()

>>> t.render(c)

u"dear john smith,

\n\nthanks for placing an order from outdoor

equipment. it's scheduled to\nship on april 2, 2009.

\n\n\nyou

didn't order a warranty, so you're on your own when\nthe products

inevitably stop working.

\n\n\nsincerely,

outdoor equipment

"

讓我們逐步來分析下這段**:

首先我們匯入 (import)類 template 和 context ,它們都在模組 django.template 裡。

我們把模板原始文字儲存到變數 raw_template 。注意到我們使用了三個引號來 標識這些文字,因為這樣可以包含多行。

接下來,我們建立了乙個模板物件 t ,把 raw_template 作為 template 類建構函式的引數。

我們從python的標準庫匯入 datetime 模組,以後我們將會使用它。

然後,我們建立乙個 context 物件, c 。 context 構造的引數是 python 字典資料型別。 在這裡,我們指定引數 person_name 的值是 'john smith' , 引數 company 的值為 『outdoor equipment』  等等。

最後,我們在模板物件上呼叫 render() 方法,傳遞 context 引數給它。 這是返回渲染後的模板的方法,它會替換模板變數為真實的值和執行塊標籤。

注意,warranty paragraph 顯示是因為 ordered_warranty 的值為 true . 注意時間的顯示, april 2, 2009 , 它是按 'f j, y' 格式顯示的。

如果你是 python 初學者,你可能在想為什麼輸出裡有回車換行的字元 ('\n' ) 而不是 顯示回車換行? 因為這是 python 互動直譯器的緣故: 呼叫 t.render(c) 返回字串, 直譯器預設顯示這些字串的 真實內容呈現 ,而不是列印這個變數的值。 要顯示換行而不是 '\n' ,使用 print 語句: print t.render(c) 。

這就是使用 django 模板系統的基本規則: 寫模板,建立 template 物件,建立 context , 呼叫 render() 方法。

同一模板,多個上下文

一旦有了 模板 物件,你就可以通過它渲染多個context, 例如:

>>> from django.template import template, context

>>> t = template('hello, }')

>>> print t.render(context())

hello, john

>>> print t.render(context())

hello, julie

>>> print t.render(context())

hello, pat

無論何時我們都可以像這樣使用同一模板源渲染多個context,只進行 一次模板建立然後多次呼叫render()方法渲染會更為高效:

# bad

for name in ('john', 'julie', 'pat'):

t = template('hello, }')

print t.render(context())

# good

t = template('hello, }')

for name in ('john', 'julie', 'pat'):

print t.render(context())

django 模板解析非常快捷。 大部分的解析工作都是在後台通過對簡短正規表示式一次性呼叫來完成。 這和基於 xml 的模板引擎形成鮮明對比,那些引擎承擔了 xml 解析器的開銷,且往往比 django 模板渲染引擎要慢上幾個數量級。

Django 模板渲染

參考文件 django的學習已經丟了很長一段時間了,時值年底,基本工作都差不多了,準備重新撿起來。學習心得也會有空mark一下!準備作業 讓我們一覽 django 全貌 urls.py 入口,關聯到對應的views.py中的乙個函式 或者generic類 訪問 就對應乙個函式。views.py 處理...

Django 渲染到模板

簡單的路由操作 from index import views urlpatterns path admin admin.site.urls path index views.index index應用下的 views 檔案進行輸出到模板方法 第一步 template新建 index.html 第二...

Django模板渲染 (二)

模板是由html 和一些邏輯控制 組成的,邏輯控制 除了前面介紹的變數和過濾器,還要乙個非常重要的模板標籤。模板標籤的語法規則是,模板標籤在渲染的過程中能提供任意的邏輯關係,模板標籤一般都有著與之對應的結束標籤,其標籤名為在原來的標籤名前加上end。下面介紹下一些常用的模板標籤。條件標籤用於判斷,可...