Python的web模板,其實就是在HTML文檔中使用控制語句和表達語句替換HTML文檔中的變數來控制HTML的顯示格式,Python的web模板可以更加靈活和方便的控制HTML的顯示,而且大大地減少了編程人員的工作量。 模板語法: 1、控制語句{% ... %}:控制語句需要用{% end %}來 ...
Python的web模板,其實就是在HTML文檔中使用控制語句和表達語句替換HTML文檔中的變數來控制HTML的顯示格式,Python的web模板可以更加靈活和方便的控制HTML的顯示,而且大大地減少了編程人員的工作量。
模板語法:
1、控制語句{% ... %}:控制語句需要用{% end %}來作為此語句結束標誌,通常用來作迴圈控制、條件控制、模塊控制等,可以更加方便的控制HTML內容的顯示;
2、表達語句{{ ... }}:一條表達語句就相當於一條Python語句,不需要結束語句,{{和}}之間可以放入任何Python表達式,Python模板語法可以自動運行{{和}}中的語句並把運行結果顯示在HTML模板中;
3、母板繼承:在母板中使用{% block block_name %}{% end %}進行模塊的占位,block_name可以自己定義,其他的都是固定的語法格式;在子模板中使用{% extends "xxx.html" %}表示此HTML模板繼承自“xxx.html”模板(母板),然後在子模板中使用{% block block_name %} ... {% end %}重新定義母板中占位的模塊,子模板中定義模塊內容就會顯示在母板中占位的位置,不同的子模板中可以定義不同的模塊內容來滿足自身的需要;
4、模板導入:在一個HTML模板中使用{% include "xxx.html" %},就會將xxx.html的內容導入(嵌入)當前HTML模板中,一般會將一些公共內容寫在一個模板中,然後導入到需要使用的模板中,以達到代碼重用的效果,使模板編碼更加簡潔方便;
5、模板函數:
1)static_url("static_file_path"):導入靜態文件,參數為靜態文件的路徑全名,例如<link href="{{ static_url("xxx.css") }}" rel="stylesheet" />,如果設置了靜態文件路徑(比如tornado.web.Application中參數settings的選項static_path),則該參數為設置的靜態文件路徑下的相對路徑;
2)escape(string):將string中的$、<和>轉換成對應的HTML字元串;
3)更新中...
下麵是用tornado寫的一個非常簡單的web模板應用:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import tornado.web 4 import tornado.ioloop 5 6 from tornado.options import define, options 7 8 define('port', default=8888, help='run on give the give port', type=int) 9 10 11 # 用於處理網頁的請求 12 class MainHandler(tornado.web.RequestHandler): 13 def get(self, *args, **kwargs): 14 personinfodict = { 15 'name': 'Jason', 16 'age': 20, 17 'gender': 'male', 18 } 19 itemlist = ['name', 'age', 'gender'] 20 # 將變數以參數的形式傳入HTML模板中 21 self.render('personinfo.html', itemlist=itemlist, personinfodict=personinfodict, welcome='hello guy!') 22 23 24 # 設置不同路由的網頁對應的處理類 25 app = tornado.web.Application([ 26 (r'/', MainHandler) 27 ]) 28 29 # 開始主程式I/O迴圈 30 if __name__ == '__main__': 31 app.listen(options.port) 32 tornado.ioloop.IOLoop.instance().start()
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <!-- 使用表達語句輸出變數的值 --> 6 <title>{{ welcome }}</title> 7 </head> 8 <body> 9 <ul><!-- 使用控制語句控制HTML內容的輸出,也減少了許多工作量 --> 10 {% for item in itemlist %} 11 <li>{{ item }}: {{ personinfodict[item] }}</li> 12 {% end %} 13 </ul> 14 </body> 15 </html>