Tornado框架-模板語言的三種方式
模板語言就是可以在html頁面,接收邏輯處理的self.render()方法傳輸的變量,將數據渲染到對應的地方
一、接收值渲染
{{...}}接收self.render()方法傳值的變量或一個值
#!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #導入tornado模塊下的web文件 #邏輯處理 class MainHandler(tornado.web.RequestHandler): #定義一個類,繼承tornado.web下的RequestHandler類 def get(self): #get()方法,接收get方式請求 self.render("cshi.html",zhi = "網站名稱") #顯示cshi.html文件,將zhi變量傳到模板語言里渲染 settings = { #html文件歸類配置,設置一個字典 "template_path":"template", #鍵為template_path固定的,值為要存放HTML的文件夾名稱 "static_path":"static", #鍵為static_path固定的,值為要存放js和css的文件夾名稱 } #路由映射 application = tornado.web.Application([ #創建一個變量等於tornado.web下的Application方法 (r"/index", MainHandler), #判斷用戶請求路徑后綴是否匹配字符串index,如果匹配執行MainHandler方法 ],**settings) #將html文件歸類配置字典,寫在路由映射的第二個參數里 if __name__ == "__main__": #內部socket運行起來 application.listen(8888) #設置端口 tornado.ioloop.IOLoop.instance().start()
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--注意js和css文件路徑配置后必須在引入路徑里加上配置文件夾名稱--> <link rel="stylesheet" href="static/s1.css"> </head> <body> <!--{{zhi}}接收self.render()方法傳值的變量或一個值--> <h1>{{zhi}}</h1> </body> </html>
二、接收值,運行代碼塊
{%...%}{%end%}在html渲染代碼塊,支持html里代碼塊書寫,並能接收self.render()方法傳值
#!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #導入tornado模塊下的web文件 #邏輯處理 class MainHandler(tornado.web.RequestHandler): #定義一個類,繼承tornado.web下的RequestHandler類 def get(self): #get()方法,接收get方式請求 self.render("cshi.html",zhi = ["首頁","資訊","關於"]) #顯示cshi.html文件,將列表傳到模板語言里渲染 settings = { #html文件歸類配置,設置一個字典 "template_path":"template", #鍵為template_path固定的,值為要存放HTML的文件夾名稱 "static_path":"static", #鍵為static_path固定的,值為要存放js和css的文件夾名稱 } #路由映射 application = tornado.web.Application([ #創建一個變量等於tornado.web下的Application方法 (r"/index", MainHandler), #判斷用戶請求路徑后綴是否匹配字符串index,如果匹配執行MainHandler方法 ],**settings) #將html文件歸類配置字典,寫在路由映射的第二個參數里 if __name__ == "__main__": #內部socket運行起來 application.listen(8888) #設置端口 tornado.ioloop.IOLoop.instance().start()
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--注意js和css文件路徑配置后必須在引入路徑里加上配置文件夾名稱--> <link rel="stylesheet" href="static/s1.css"> </head> <body> <ul> {% for i in zhi %} <li>{{i}}</li> {% end %} </ul> </body> </html>
模板語言,for循環列表加if判斷
#!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #導入tornado模塊下的web文件 #邏輯處理 class MainHandler(tornado.web.RequestHandler): #定義一個類,繼承tornado.web下的RequestHandler類 def get(self): #get()方法,接收get方式請求 self.render("cshi.html",zhi = ["首頁","資訊","關於"]) #顯示cshi.html文件,將列表傳到模板語言里渲染 settings = { #html文件歸類配置,設置一個字典 "template_path":"template", #鍵為template_path固定的,值為要存放HTML的文件夾名稱 "static_path":"static", #鍵為static_path固定的,值為要存放js和css的文件夾名稱 } #路由映射 application = tornado.web.Application([ #創建一個變量等於tornado.web下的Application方法 (r"/index", MainHandler), #判斷用戶請求路徑后綴是否匹配字符串index,如果匹配執行MainHandler方法 ],**settings) #將html文件歸類配置字典,寫在路由映射的第二個參數里 if __name__ == "__main__": #內部socket運行起來 application.listen(8888) #設置端口 tornado.ioloop.IOLoop.instance().start()
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--注意js和css文件路徑配置后必須在引入路徑里加上配置文件夾名稱--> <link rel="stylesheet" href="static/s1.css"> </head> <body> <ul> <!--循環列表,加判斷--> {% for i in zhi %} {% if i == "首頁" %} <li style="color: #ee1215">{{i}}</li> {% else %} <li>{{i}}</li> {% end %} {% end %} </ul> </body> </html>
三、自定義,可以在html里執行函數
有兩種方式,一種叫uimethod,一種叫uimodule
uimethod方式
1、首先新建一個py文件來寫html可以調用的函數
2、在模板引擎導入新建的py文件,在邏輯處理配置字典里配置鍵為ui_methods(固定的):值為新建的py文件路徑名稱
3、在html{{func()}}執行py文件里的函數
模板引擎
#!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #導入tornado模塊下的web文件 import uimethod #邏輯處理 class MainHandler(tornado.web.RequestHandler): #定義一個類,繼承tornado.web下的RequestHandler類 def get(self): #get()方法,接收get方式請求 self.render("cshi.html",zhi = ["首頁","資訊","關於"]) #顯示cshi.html文件,將列表傳到模板語言里渲染 settings = { #html文件歸類配置,設置一個字典 "template_path":"template", #鍵為template_path固定的,值為要存放HTML的文件夾名稱 "static_path":"static", #鍵為static_path固定的,值為要存放js和css的文件夾名稱 'ui_methods': uimethod, #配置html文件函數調用模塊 } #路由映射 application = tornado.web.Application([ #創建一個變量等於tornado.web下的Application方法 (r"/index", MainHandler), #判斷用戶請求路徑后綴是否匹配字符串index,如果匹配執行MainHandler方法 ],**settings) #將html文件歸類配置字典,寫在路由映射的第二個參數里 if __name__ == "__main__": #內部socket運行起來 application.listen(8888) #設置端口 tornado.ioloop.IOLoop.instance().start()
uimethod.py文件,html函數調用文件
#!/usr/bin/env python #coding:utf-8 def func(self): return "123"
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--注意js和css文件路徑配置后必須在引入路徑里加上配置文件夾名稱--> <link rel="stylesheet" href="static/s1.css"> </head> <body> <h1>{{func()}}</h1> <ul> </ul> </body> </html>
uimodule方式
1、新建一個py文件來寫html文件調用函數,這個py文件必須導入tornado.web下的UIModule方法,在py文件創建類必須繼承UIModule方法,在這個類里寫html執行函數
2、模板引擎導入新建的py文件,在模板引擎配置字典配置訪問,ui_modules固定的:uimodule新建py文件路徑名稱,
3、在html調用py文件里的函數{% module fghj() %},注意調用方式{% module固定的 fghj()要執行的函數 %}
模板引擎
#!/usr/bin/env python #coding:utf-8 import tornado.ioloop import tornado.web #導入tornado模塊下的web文件 import uimodule #邏輯處理 class MainHandler(tornado.web.RequestHandler): #定義一個類,繼承tornado.web下的RequestHandler類 def get(self): #get()方法,接收get方式請求 self.render("cshi.html",zhi = ["首頁","資訊","關於"]) #顯示cshi.html文件,將列表傳到模板語言里渲染 settings = { #html文件歸類配置,設置一個字典 "template_path":"template", #鍵為template_path固定的,值為要存放HTML的文件夾名稱 "static_path":"static", #鍵為static_path固定的,值為要存放js和css的文件夾名稱 'ui_modules':uimodule, #配置html文件函數調用模塊 } #路由映射 application = tornado.web.Application([ #創建一個變量等於tornado.web下的Application方法 (r"/index", MainHandler), #判斷用戶請求路徑后綴是否匹配字符串index,如果匹配執行MainHandler方法 ],**settings) #將html文件歸類配置字典,寫在路由映射的第二個參數里 if __name__ == "__main__": #內部socket運行起來 application.listen(8888) #設置端口 tornado.ioloop.IOLoop.instance().start()
uimodule.py文件,html函數調用文件
#!/usr/bin/env python # -*- coding:utf-8 -*- from tornado.web import UIModule from tornado import escape class custom(UIModule): def render(self, *args, **kwargs): return "123" class fghj(UIModule): def render(self, *args, **kwargs): return [1,2,3,4,5]
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--注意js和css文件路徑配置后必須在引入路徑里加上配置文件夾名稱--> <link rel="stylesheet" href="static/s1.css"> </head> <body> <h1>{% module custom() %}</h1> <h1>{% module fghj() %}</h1> <ul> </ul> </body> </html>