Hello in Mako_ ================ :Author: Frankie Chow :Version: 1 :Copyright: Creative Commons licenses :Date: 2009-3-19 :Description: 此文章簡介 Python 的 Mako template 系統。 :Category: Notes, Python, Mako, Template :ShortName: Hello in Mako .. contents:: 何謂 Template ================== 世上最出名的 Template 系統是 PHP 語言,它其本上就是一個 Template 語言,因此它的出現也迷倒了不少的網頁制作者。 我們來看看一個簡單的 PHP_ 語言吧。 .. _PHP: http://www.php.net/manual/en/introduction.php 一個簡單的例子 ----------------------------------- 我們要認識什麼是 Template 系統,最好就是先看看一個簡單的 php 程式。 .. sourcecode:: php 以下是執行結果 :: Hello 從結果來的討論 ------------------------------- 您可以看見那 **** 是存在 **html** 碼中,執行後傳回了 **Hello** 字串,而這個字串亦是夾在那 **html** 碼中間。 這是標準的 Template 的工作。 我們使用 Mako_ 在作 Template 工作 =========================================== 現在我們來討論 Mako_ 的 Template 工作。首先我們在 Python 中使用 Template 來工作,比較多人使用的有 Cheetah_ 、 Mako_ 及 Django_ 亦有自己專屬的 Template 系統。至於 `Google App Engine`_ 中言及的 Template 則是由 Django_ 而來的。 使用 Mako_ ================ 如果您本是 php 的玩家,這方面看來一定會感到頭大的,因為 php 並沒有使用的問題,直接拿來寫就可以了,但是 Python 並不是一個天生的 Template 語言,所以就存在了使用的問題了。 簡單例子 -------------------- 我們先來看以下的一個間單例子︰ .. sourcecode:: python from mako.template import Template t = """\ ${'Hello'} """ print Template(t).render() 這裡的執行結果和之前的 php 程式執行結果是相同的。您也可以看見在這裡您需要更為複雜的編寫方法。 首先您要在 **mako.template** 中 **import Template** 的 class!另外您也需要把它建立和 **render()** 才產生需要的結果。 傳入數值 Template 中 ============================= Template 系統中也有一個重要的特色,就是接收在主程式中傳入數值。 例如︰ php 的網頁程式,就會接收網頁中經 GET 或 POST 傳入的表單或 url 中的數躆。 當然 Mako 中的 Template 也要能接收不同的數躆才行。 [#]_ .. [#] 但是 Python 中要如傳收網頁中經 GET 或 POST 傳入的數躆,我們還是需要其它模組的配合才可以達到。不如 php 之方便!但是您真是一個貪方便的人嗎?! 數躆傳入的例子 -------------------------------- 我們來看看以下的例子。 .. sourcecode:: python from mako.template import Template t = """\ ${hello} """ print Template(t).render(hello="Hello") 修改的地方不多,程式把字串傳入 hello 這個變數中,然後再把它傳送到 Template 中。 結語 ======== 我們對 Mako 的使用介紹就到此一停了。雖然不同的 Template 也有不同的使用者和使用實例。 那最得提的 Mako 的使用實例是什麼呢?!那就是 http://www.python.org 了。 您可以看 README_ ,內中亦提到 Mako 。本網站亦使用 Mako 作 Template 系統! .. _README: https://svn.python.org/www/trunk/beta.python.org/build/README .. _Google App Engine: http://code.google.com/intl/zh-CN/appengine/docs/python/gettingstarted/templates.html .. _Cheetah: http://www.cheetahtemplate.org/ .. _Django: http://www.djangoproject.com/ .. _Mako: http://www.makotemplates.org/