想要在python**中使用模板系統,只需遵循下面兩個步驟:
1.可以用原始的模板**字串建立乙個 template 物件,django同樣支援用指定模板檔案路徑的方式來建立 template 物件;呼叫 template 物件的 render() 方法並提供給他變數(i.e., 內容).它將返回乙個完整的模板字串內容,包含了所有標籤塊與變數解析後的內容.
一旦你建立乙個 template 物件,你可以用 context 來傳遞資料給它。乙個context是一系列變數和它們值的集合。模板使用它來賦值模板變數標籤和執行塊標籤。
context在django裡表現為 context 類,在 django.template 模組裡。 它的建構函式有乙個可選引數:乙個字典(對映變數和它們的值)。呼叫 template 物件 的 render() 方法並傳遞context來填充模板:
from django.template import context, template一旦有了 模板 物件,你就可以通過它渲染多個背景(context),例如:>>> t = template("my name is }.")
>>> c = context()
>>> t.render(c)
'my name is stephane.'
>>> 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
1
模板 物件,然後對它多次呼叫 render() 將會更加高效。
# badfor 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())
在到目前為止的例子中,我們通過 context 傳遞的簡單引數值主要是字串,還有乙個
datetime.date
範例。然而,模板系統能夠非常簡潔地處理更加複雜的資料結構,例如list、dictionary和自定義的物件。
from django.template import template, context同樣,也可以通過句點來訪問物件的屬性。比方說, python 的>>> person =
>>> t = template('} is } years old.')
>>> c = context()
>>> t.render(c)
'sally is 43 years old.'
datetime.date
物件有
year
、 month
和 day 幾個屬性,你同樣可以在模板中使用句點來訪問這些屬性:
from django.template import template, context用類的例項渲染模板>>> import datetime
>>> d = datetime.date(1993, 5, 2)
>>> d.year
1993
>>> d.month
5>>> d.day
2>>> t = template('the month is } and the year is }.')
>>> c = context()
>>> t.render(c)
'the month is 5 and the year is 1993.'
from django.template import template, context最後,句點也可用於訪問列表索引,>>> class person(object):
... def __init__(self, first_name, last_name):
... self.first_name, self.last_name = first_name, last_name
>>> t = template('hello, } }.')
>>> c = context()
>>> t.render(c)
'hello, john smith.'
from django.template import template, context方法呼叫行為>>> t = template('item 2 is }.')
>>> t.render(c)
'item 2 is carrots.'
方法呼叫比其他型別的查詢略為複雜一點。 以下是一些注意事項:
在方法查詢過程中,如果某方法丟擲乙個異常,除非該異常有乙個 silent_variable_failure 屬性並且值為 true ,否則的話它將被傳播。如果異常被傳播,模板裡的指定變數會被置為空字串,比如:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> t
=
template(
"my name is }."
)
>>>
class
personclass3:
...
def
first_name(
self
):
...
raise
assertionerror,
"foo"
>>> p
=
personclass3()
>>> t.render(context())
traceback (most recent call last):
...
assertionerror: foo
>>>
class
silentassertionerror(assertionerror):
... silent_variable_failure
=
true
>>>
class
personclass4:
...
def
first_name(
self
):
...
raise
silentassertionerror
>>> p
=
personclass4()
>>> t.render(context())
u
'my name is .'
僅在方法無需傳入引數時,其呼叫才有效。 否則,系統將會轉移到下乙個查詢型別(列表索引查詢)。
Django學習筆記
django web程式設計思路 global setting run server check environment start project django admin.py startproject mysite 生成專案檔案 manage.py 檔案基本就是 django admin.py...
django學習筆記( )
下面的都是自己學習django框架開發的過程記錄,全當做筆記了,不喜勿噴,大神求指教 環境 ubuntu14.04 django 1.8.3 python 2.7.6 ide eclipse pydev 首先先建立乙個django project 名為blog 再在blog下建立statics與te...
django學習筆記
為了學習fabric,因為fabric的示例用到了django專案,所以就快速地開始根據官網的教程,搭建了簡單的投票應用,剛走通了前幾步。我覺得django搭建 的速度實在是超級快!非常適合快速原型開發。我很喜歡的是,只要改改模型 model view controller的model 也就是核心業...