Tornado模板學習
tornado是一個python編寫的一個強大的、可擴展的web服務器。
Tornado包括了一個有用的模塊(tornado.options)來從命令行中讀取設置
Tornado的RequestHandler類有一系列有用的內建方法,包括get_argument,我們在這裏從一個查詢字符串中取得參數greeting的值。(如果這個參數沒有出現在查詢字符串中,Tornado將使用get_argument的第二個參數作爲默認值。)
RequestHandler的另一個有用的方法是write,它以一個字符串作爲函數的參數,並將其寫入到HTTP響應中
一旦Application對象被創建,我們可以將其傳遞給Tornado的HTTPServer對象,然後使用我們在命令行指定的端口進行監聽(通過options對象取出。)最後,在程序準備好接收HTTP請求後,我們創建一個Tornado的IOLoop的實例。
基本瞭解
1、在Application的參數中添加template_path配置,指定模板的路徑和靜態文件的路徑
template_path='template';
static_path='static';
2、把html文件放入template文件夾下,把靜態文件放入static文件夾下
3、使用render方法渲染模板
class IndexHandler(tornado.Web.RequestHandler);
def get(self);
self.render('tmp_index.html');
這段代碼告訴Tornado在templates文件夾下找到一個名爲tmeplate_index.html 的文件,讀取其中的內容,並且發送給瀏覽器
模板中的符號
{{}}表達式用雙括號包圍,內容是可以是如何python表達式,在雙大括號中的單詞是佔位符
{% %}模板控制語句以{% %}包圍
### 1、雙大括號中放置變量名或表達式,變量名與傳入的關鍵字參數名要相同
```python
#傳入一個表達式
{{ 1+2 }}
<br>
{{ time.time() }} # 可以執行函數
<br>
{{ haha() }} # 自定義的函數也可以傳入
```
2、控制語句
控制語句的返回以最近的{% end %}結束
if條件判斷
{% if condition %}
{% else condition %}
{% else %}
{% end %}
for循環
{% for var in expr %}
...
{% end %}
模板轉義
atag = "<a href='https://www.baidu.com/' target='_blank'>'---百度---' </a><br> "
self.render('03escape.html',
username=username,
time=time,
urllist=urllist,
atag=atag
)
當然這個默認自動是轉義的,如果不要轉義也是可以的,有如下方法:
1.全局轉義,在Application中添加配置項
autoescape=None,
2.在文檔最開始添加
{% autoescape None %} #實現整個文檔轉義
{{ atag }}
{{ escape(atag) }}
3.也可以使用 {% raw xxx %} 來輸出不轉義內容
{% raw atag %}
模板繼承
把多個頁面相同的內容提取出來放在一個base.html文件中,各個子html文件不同的內容使用塊語句佔位
子html重寫這個塊中的內容。
模板中使用函數
escape(s) 替換字符串中的&、<、>爲他們對應的html字符。
url_escape(s) 使用urllib.quote_plus替換字符串中的字符爲URL編碼格式。
json_encode(val) 將val轉換json格式
squeeze(s) 過濾字符串s,把連續的多個空白字符替換爲一個空格
static_url的函數來生成static目錄下文件的URL
模板擴展
語法:{% extends "filename.html" %}
塊,block語句
語法:{% block header %}{% end %}
注:一個語法錯誤或者沒有閉合的{% block %}語句可以使得瀏覽器直接顯示500: Internal Server Error(如果你運行在debug模式下會引發完整的Python堆棧跟蹤)