第二百五十九节,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>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tornado、Flask和Django是三种常见的Python Web框架,它们各自有不同的特点和适用场景。 1. Tornado是一个高性能的异步Web框架,它使用非阻塞的I/O模型,适用于需要处理大量并发连接的场景,如实时聊天、推送服务等。Tornado具有轻量级、简单易用的特点,同时也提供了一些常用的Web开发功能,如路由、模板引擎等。 2. Flask是一个轻量级的微框架,它以简洁、灵活为设计理念,适用于小型项目或者需要快速搭建原型的场景。Flask提供了基本的Web开发功能,如路由、模板引擎等,同时也支持扩展插件来满足更复杂的需求。 3. Django是一个全功能的Web框架,它提供了一整套完善的工具和功能,适用于中大型项目或者需要快速开发的场景。Django具有强大的ORM(对象关系映射)支持、自动生成Admin后台管理界面、安全性高等特点。Django还提供了许多内置的功能模块,如用户认证、缓存、国际化等,使得开发者可以更专注于业务逻辑的实现。 选择Django的原因主要有以下几点: 1. 全功能性:Django提供了一整套完善的工具和功能,可以满足大部分Web开发需求,包括数据库操作、用户认证、缓存、国际化等。 2. 开发效率高:Django提供了自动生成Admin后台管理界面的功能,可以快速搭建管理界面,减少开发工作量。同时,Django还有丰富的第三方插件和社区支持,可以快速集成各种功能模块。 3. 成熟稳定:Django已经经过多年的发展和实践,在大量的项目中得到了验证,具有较高的稳定性和可靠性。 关于性能比较,需要根据具体的应用场景和需求来评估。一般来说,Tornado在处理大量并发连接时具有较好的性能表现,适合实时性要求较高的场景;Flask和Django在处理普通的Web请求时性能表现也很不错。但是性能不仅仅取决于框架本身,还与应用程序的具体实现、服务器配置等因素有关。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值