Pylons是一個典型的MVC Web框架,在之前的幾篇隨筆中,我們一起了解了Pylons的安裝、默認項目結構、Routes和controller("C")以及SQLAlchemy("M"),在這個系列的最后,我們一起來看看"V"。
在我們的controller代碼中,每個action在return的時候,可以選擇:
1- 直接return字符串
2- 通過render()函數將輸出交給頁面模板引擎處理
3- redirect_to()重定向到其他URL
直接return太簡單,redirect_to也沒有特別需要介紹的,重點看render()。如果你一直follow這個系列,那么在你的controllers/hello.py中,可以看到這樣一行import:
from?newapp.lib.base?import?BaseController,?render
從lib.base引入了一個render函數,跟到lib/base代碼里查看,我們會知道:
from?pylons.templating?import?render_mako?as?render
其實我們用到的render()函數,是pylons.templating.render_mako的別名。
注: 這里假定你在paster create時選擇了默認的mako,其他Pylons原生支持的頁面模板引擎還有結構相對更層次化的Genshi和更接近Django實現的Jinja。
render_mako()函數簽名如下:
render_mako(template_name, extra_vars=None, cache_key=None, cache_type=None, cache_expire=None)
最基本的用法是給出template文件名,然后通過extra_vars傳入參數,Pylons默認查找頁面模板文件是在項目的templates子目錄,這個路徑也可以在config/environment.py中修改。在Pylons中,被推薦的傳參做法是使用tmpl_context,在生成controller的時候,已經自動import了tmpl_context并別名為c,這樣,我們只需要在c上綁上我們需要傳遞給模板的數據,模板在解析時,也就能夠通過c得到這些數據了。像這樣:
c.name?=?u'Pylons?n00b'
return?render('hello.mako')
然后,在hello.mako中:
<h3>Hello?<b>${c.name}</b>!</h3>
在模板代碼中,有些Pylons系統變量/函數是可以直接訪問的,包括:
tmpl_context (c) - 用于controller和template傳遞數據
config - 配置信息
app_globals (g) - 應用的全局變量
h - WebHelpers,包括h.form、h.link_to、h.url_for等等實用函數
request - 請求
response - 應答
session - 會話信息
translator、ungettext()、_()、N_() - 處理國際化
除了基本的${}變量替代語法之外,類似JSP,Mako還支持注釋、if/else/for控制邏輯、代碼片段、return、標簽等,具體的可以掃一眼官方說明:
http://www.makotemplates.org/docs/syntax.html很精簡,也非常容易理解,這里就不詳細說明了。
至此,我們已經了解了Pylons最核心的幾個組件,足夠我們搭建常規的Web應用了。其他值得大家繼續挖掘的內容包括:國際化、表單驗證(FormEncode)、用戶驗證和權限(AuthKit、repoze.who、repoze.what)、AJAX、Python 3.0、WSGI基礎架構等。
本文是該系列最后一篇,希望通過簡單的介紹和學習,大家能夠喜歡并順利的上手Pylons,也希望越來越多的人關注這個優秀的Python Web應用框架。