第二百五十九節,Tornado框架-模板語言的三種方式


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM