前面已經轉過一篇mako模板的呼叫方法,看了看也挺簡單的,這次主要是學習模板的編寫語法。之所以選擇mako模板,除了它的口碑好之外,主要是我受不了web.py自帶模板了,特別是控制結構那裡,沒有使用結束標記,非得縮排使用才行,嚴重影響頁面的編排。因為沒有搜到有現成的中文教程,就勉強看官方的英文原版了。做個學習記錄在此。
mako語法
mako模板可以是任何文字流形式的檔案,html、xml都行,當然txt文字也是可以的。不過web.py裡面如果使用render_mako的話還是只認html的。mako會從中查詢變數、函式、定義塊等進行執行,而且定義塊裡面可以直接編寫python**。嘿嘿,神氣得很吶。
1、變數
mako中使用「${}」來定義變數格式,舉個例子,在default.html中編寫:
顯示變數temp的值:$
變數temp乘2:$變數temp的平方:$
呼叫例項,在web.py中定義
class index:def get(self):
temp = 10
return render.default(temp=temp)
執行結果:
顯示變數temp的值:10變數temp乘2:20
變數temp的平方:100
2、轉義符
在定義變數時,如果其中包含特殊符號時記得要使用轉義符轉換。u負責轉換url位址,h轉換html,x對xml進行轉義,trim就是去空格啦。
url: $url(with escaping): $
html: $
html(with escaping): $
看看輸出就明白了
url: there is some texturl(with escaping): there+is+some+text
html: show html(with escaping): show
3、控制結構
mako模板中使用%來定義控制結構,像if、for、try之類的,關鍵的就是要使用「%end」來關閉控制結構。這個應該很好理解了,上個菜:
% for a in [0,1,2,3,4,5,6,7,8,9]% if a%2==0:
$是偶數
% else:
$是奇數
% endif
% endfor
顯示結果:
0是偶數1是奇數
2是偶數
3是奇數
4是偶數
5是奇數
6是偶數
7是奇數
8是偶數
9是奇數
4、注釋
這個沒什麼好說的,兩個井號##是當行注釋,而<%doc>和中間可以寫多行注釋
5、換行過濾
同python**中一樣,可以使用「\」來強制不換行。
測試mako模板中可\換行否
6、python**塊
在mako模板中可以直接寫py**,這是個功能很強大的地方,python**寫在<%和%>之間即可。
<%x = [1,2,3,4,5,6,7,8,9,0]
y = [z for z in x if z%2==0] # 僅選擇偶數出來
%>
% for elem in y:
element: $
% endfor
輸出結果:
element: 2element: 4
element: 6
element: 8
element: 0
7、模組級**
上面有說可以直接在mako中上一般的python**,還有更強大的地方,可以在引入模組和定義函式等等,在<%! %>中定義即可。
這個模組級別的**塊是在引入mako模板時直接載入到記憶體中的,是優先於render定義的。所以並不能直接用來進行頁面內容的輸出。我個人感覺就是如果使用<%! %>來引入了模組和函式,就相當於在後台code中引入,可以作為發布後修改code的補丁形式。
<%!import mylib...
import re
def filter(text):
return re.sub(r"^@", "", text)
%>
8、標籤
mako模板中其他的一些功能都是通過標籤來定義的,定義格式為<%tagname>。前面的多行注釋<%doc>就是標籤裡的一種。
官方文件對每個標籤都有詳細的描述,特別是像<%def>、<%namespace>、<%inherit>等都有專門的篇章進行介紹的。
<%page> 定義模板的頁面資訊
<%include> 引入其他檔案
<%def> 定義python函式
<%namespace> 命名空間,有點.net的感覺
<%inherit> 繼承父模板
<%namespacename:defname> 呼叫其他命名空間中的函式
<%call> 一樣的呼叫函式
<%doc> 前面有了,就是注釋
<%text> doc,類似於python的三引號。使用filter定義轉義(h/u/t)
-the end-
mako模板基礎
mako模板算是python裡面比較出色的乙個模板了,它宣稱有比jinja2更快的解析速度已經更多的語法支援,本篇部落格對它的使用做乙個小結。使用pip可以方便的安裝 無需root許可權,安裝到使用者目錄下 pip install mako user python2 pip3 install mak...
用mako增強django模板,用法像jsp
django預設的模板功能還可以,但是不能直接用python的語法,mako解決了這個痛點,使得django的模板變得像jsp一樣,可以直接使用python的語法做一些事情。mako django mako demo 直接的類似python string format的樣子 from mako.te...
Mako模板引擎安裝及在Django中的整合
最近使用django做專案,覺得自帶模板侷限性很大,使用起來自由度不高,最終還是痛下決心換mako模板。找到一篇文章,講述如何在django的基礎上安裝mako並使用。mako模板引擎安裝及在django中的整合 作業系統 linux cent os 5 max os x 10.6 snow leo...