Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

          導航

          公告


          • 關于我
          • 人生是一場對話
          • gaoyuxiang AT gmail DOT com
          • titlelogo.png

          • 我的譯作
          • Scala for the Impatient
          • Open Source SOA
          • Programming in Scala

          • 聲明
          • 所有文章和代碼在這里以"現狀"提供,作者不提供任何形式的擔保,也沒有授予除閱讀和有條件共享之外的任何權利。除非特別說明,所有文章均為本blog作者原創,如需轉載請注明出處和原作者,如用于商業目的,需作者本人書面許可。

          • 推薦文章
          • Pylons起步

          常用鏈接

          留言簿(29)

          隨筆分類(842)

          隨筆檔案(507)

          文章檔案(4)

          Friends' blogs

          搜索

          •  

          積分與排名

          • 積分 - 783198
          • 排名 - 54

          最新評論

          閱讀排行榜

          評論排行榜

          [Pylons] Mako頁面模板引擎

          Posted on 2009-01-27 15:50 laogao 閱讀(2235) 評論(0)  編輯  收藏 所屬分類: On Python

          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應用框架。

          主站蜘蛛池模板: 田林县| 庆城县| 会昌县| 上高县| 凌源市| 璧山县| 巫溪县| 北宁市| 正定县| 安福县| 罗山县| 元阳县| 澎湖县| 乡宁县| 金乡县| 三台县| 阳春市| 新竹市| 峨山| 鹤庆县| 鹤山市| 临沧市| 许昌县| 南安市| 武乡县| 长宁县| 揭东县| 连江县| 观塘区| 施秉县| 丽水市| 清水县| 永定县| 普兰县| 遂昌县| 增城市| 苗栗市| 福州市| 山东省| 兴安县| 巨鹿县|