2015年8月17日

Tornado 教學 (3) - 在 Tornado 中使用 Template ( Use template with Tornado Web Framework )

上一篇文章大約介紹了一個簡單的 Tornado Web Application 結構,但我們是直接在 Handler 裡面輸出頁面內容,而實際上我們不可能每次都手動編寫整個網頁,這時候就需要 Template 引擎的幫忙來減少開發者的工作量。本篇將介紹如何利用在 Tornado 中利用 Template。( 其他 Tornado 相關教學可以參考本篇整理 )



使用 Template 輸出畫面
本範例將會透過 RequestHandler 指定一個 html 檔案來輸出畫面。首先建立 html 檔案,名稱為 index.html,內容如下:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Tornado Sandbox</title>
    </head>
    <body>
        <!-- 利用 Template Syntax 將參數輸出 -->
        {% for msg in messages %}
            Hello, {{ msg }}<br/>
        {% end %}
    </body>
</html>
接著修改上一篇的 server.py,內容如下:
import tornado.ioloop
import tornado.web

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        # 設定下列參數輸出於畫面
        messages = ["One", "Two", "Three", "Four"]
        # 指定 index.html 輸出,並設定參數 messages 的值
        self.render("index.html", messages=messages)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", IndexHandler)
    ], autoreload=True)
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()
整個專案的檔案架構如下:
├── Tornado
│   ├── index.html
│   └── server.py


測試 Tornado Web Application
執行 server.py
python server.py
打開瀏覽器,輸入位址 http://localhost:8888 或者像是 192.168.1.X:8888,你就可以看到網頁顯示從 Server 端取得的參數。

最後不知道你有沒有發現,我在 application 裡面加入了一個 autoreload=True 的參數,此參數可以讓 Tornado 偵測檔案有異動時自動 reload,如此一來我們就可以隨時測試最新的程式。除此之外,你還可以加入 compiled_template_cache=False 參數,讓你的 Template 呈現最新版本。


Environment :
  ・ Arch Linux
  ・ Python 2.7

Reference :
  ・ Tornado