--------------------靜態(tài)文件--------------------
1、static_path:通過(guò)向web.Application類(lèi)的構(gòu)造函數(shù)傳遞一個(gè)名為static_path的參數(shù)來(lái)告訴Tornado從文件系統(tǒng)的一個(gè)特定位置提供靜態(tài)文件
app = tornado.web.Application(
[(r'/', IndexHandler)],
static_path=os.path.join(os.path.dirname(__file__), "statics"),
)
2、對(duì)于靜態(tài)文件目錄的命名,為了便于部署,建議使用static
可以通過(guò)http://127.0.0.1/static/html/index.html來(lái)訪問(wèn)。而且在index.html中引用的靜態(tài)資源文件,我們給定的路徑也符合/static/...的格式,故頁(yè)面可以正常瀏覽。
3、StaticFileHandler:可以通過(guò)tornado.web.StaticFileHandler來(lái)自由映射靜態(tài)文件與其訪問(wèn)路徑url。
1、tornado.web.StaticFileHandler是tornado預(yù)置的用來(lái)提供靜態(tài)資源文件的handler。
2、
import os
current_path = os.path.dirname(__file__)
app = tornado.web.Application(
[
(r'^/()$', StaticFileHandler, {"path":os.path.join(current_path, "statics/html"), "default_filename":"index.html"}),
(r'^/view/(.*)$', StaticFileHandler, {"path":os.path.join(current_path, "statics/html")}),
],
static_path=os.path.join(current_path, "statics"),
)
3、path 用來(lái)指明提供靜態(tài)文件的根路徑,并在此目錄中尋找在路由中用正則表達(dá)式提取的文件名。
4、default_filename 用來(lái)指定訪問(wèn)路由中未指明文件名時(shí),默認(rèn)提供的文件。
--------------------使用模板--------------------
1、路徑與渲染
1、使用模板,需要仿照靜態(tài)文件路徑設(shè)置一樣,向web.Application類(lèi)的構(gòu)造函數(shù)傳遞一個(gè)名為template_path的參數(shù)來(lái)告訴Tornado從文件系統(tǒng)的一個(gè)特定位置提供模板文件
2、
app = tornado.web.Application(
[(r'/', IndexHandler)],
static_path=os.path.join(os.path.dirname(__file__), "statics"),
template_path=os.path.join(os.path.dirname(__file__), "templates"),
)
3、在handler中使用render()方法來(lái)渲染模板并返回給客戶(hù)端。
self.render("index.html") # 渲染主頁(yè)模板,并返回給客戶(hù)端。
2、模板語(yǔ)法
1、變量與表達(dá)式
1、在tornado的模板中使用{{}}作為變量或表達(dá)式的占位符,使用render渲染后占位符{{}}會(huì)被替換為相應(yīng)的結(jié)果值。
self.render("index.html",**kwargs)
2、{{}}不僅可以包含變量,還可以是表達(dá)式
self.render("index.html",{"p1":100,"p2":200})
{{p1 + p2}}
2、控制語(yǔ)句
1、在Tornado模板中使用Python條件和循環(huán)語(yǔ)句??刂普Z(yǔ)句以{\%和\%}包圍,并以類(lèi)似下面的形式被使用:
{% if page is None %} 或 {% if len(entries) == 3 %}
2、部分控制語(yǔ)句
1、{% if ... %} ... {% elif ... %} ... {% else ... %} ... {% end %}
2、{% for ... in ... %} ... {% end %}
3、{% while ... %} ... {% end %}
3、函數(shù)
1、static_url():Tornado模板模塊提供了一個(gè)叫作static_url的函數(shù)來(lái)生成靜態(tài)文件目錄下文件的URL。
1、使用方法
<link rel="stylesheet" href="{{ static_url("style.css") }}">
2、static_url函數(shù)創(chuàng)建了一個(gè)基于文件內(nèi)容的hash值,并將其添加到URL末尾(查詢(xún)字符串的參數(shù)v)。這個(gè)hash值確保瀏覽器總是加載一個(gè)文件的最新版而不是之前的緩存版本。無(wú)論是在你應(yīng)用的開(kāi)發(fā)階段,還是在部署到生產(chǎn)環(huán)境使用時(shí),都非常有用,因?yàn)槟愕挠脩?hù)不必再為了看到你的靜態(tài)內(nèi)容而清除瀏覽器緩存了。
3、另一個(gè)好處是你可以改變你應(yīng)用URL的結(jié)構(gòu),而不需要改變模板中的代碼。例如,可以通過(guò)設(shè)置static_url_prefix來(lái)更改Tornado的默認(rèn)靜態(tài)路徑前綴/static。如果使用static_url而不是硬編碼的話,代碼不需要改變。
2、轉(zhuǎn)義
1、模板中可以通過(guò)raw語(yǔ)句來(lái)輸出不被轉(zhuǎn)義的原始格式
2、注意:在Firefox瀏覽器中會(huì)直接彈出alert窗口,而在Chrome瀏覽器中,需要set_header("X-XSS-Protection", 0)
3、關(guān)閉自動(dòng)轉(zhuǎn)義:
1、Application中設(shè)置autoescape=None
2、模板中添加 {% autoescape None %} 語(yǔ)句
4、關(guān)閉自動(dòng)轉(zhuǎn)義后,可以使用escape()函數(shù)來(lái)對(duì)特定變量進(jìn)行轉(zhuǎn)義:{{ escape(text) }}
3、自定義函數(shù):在模板中還可以使用一個(gè)自己編寫(xiě)的函數(shù),只需要將函數(shù)名作為模板的參數(shù)傳遞即可,就像其他變量一樣。
1、定義函數(shù)
def house_title_join(titles):
return "+".join(titles)
2、將函數(shù)賦值到指定變量傳遞到模板
self.render("index.html", houses=house_list, title_join = house_title_join)
3、前端調(diào)用指定的函數(shù),并傳入對(duì)應(yīng)的參數(shù)
{{title_join(house["titles"])}}
4、塊
1、進(jìn)行模板頁(yè)的嵌套
1、指定繼承的模板頁(yè)
{% extends "base.html" %}
2、定義對(duì)應(yīng)的模塊,子模板繼承父級(jí)模板進(jìn)行對(duì)應(yīng)的替換操作
{% block block_name %} {% end %}
作者:黑馬程序員人工智能+python培訓(xùn)學(xué)院
首發(fā):http://python.itheima.com/