Tornado-Lesson05-模版继承、函数和类导入、ui_methods和ui_modules

一、模版继承

  1.extends

    {% extends  filename %}继承模版,子模版会继承父模版所有内容,减少大量代码重复。

    注意:一个子模版只能继承一个模版

  2.{% block argname %}...{% end %}  

    block包裹住一段代码,

    argname被包裹的代码块可以在子模版中可以被重写,覆盖父模版。

二、函数和类导入

  1.include

    {% include ./include.html %}  导入模版,模版文件为html文件,不用写头之类多余的,只要写要导入的块就好   

    例如:include.html

<br>this is tornado templates include<br>

 

 

三、ui_methods和ui_modules

  1.函数导入和类的导入

    1)新建文件ui_methods.py(文件名随意,只要合法就可以)

'''
this is ui_methods
'''
def methods(self):
    return 'ui_methods'

 

    新建文件ui_modules.py

'''
this is ui_modules
'''
from tornado.web import UIModule

class UiModule(UIModule):
    def render(self, *args, **kwargs):
        return 'my name is ui_modules'

    2)在项目中导入  

      import util.ui_methods
      import util.ui_modules

 

    3)配置Application参数    

      ui_methods=util.ui_methods,
      ui_modules=util.ui_modules,
      或者写成字典形式:
      ui_modules={'UiModule':util.ui_modules.UiModule}

    4)在模版中调用   

      传 入 类:{% module UiModule() %}     
      传入函数:{{ methods() }}

 

四、模版其他引用

  1. apply  

    使用apply语句,使函数的作用范围到最近的{% end %}为止

    以下结果hello和hahaha都变成大写显示,看结尾例子。

    {# 把end之前的内容放到 upper方法里执行 #}
    {% apply upper %}
    hello<br>
     hahaha{%end%}

 

 

  2. linkify

    linkify生成一个链接,但是要注意模版转义

    {{ linkify('百度: https://www.baidu.com') }}<br>
    {% raw linkify('百度: https://www.baidu.com') %}

例子:

  父模版mybase.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}Mybase{%end%}</title>
    <link rel="shortcut icon" href="{{static_url('images/favicon.ico')}}">
</head>
<body>
    {% block body %}
    This is Tornato!
    <img src="{{static_url('images/favicon.ico')}}">
    {%end%}
</body>
</html>

  子模版mybase_02.html

{% extends mybase.html %} {#模版继承#}

{% block title %}Child{% end %}

{% block body %}
This is Child!
<img src="{{static_url('images/favicon.ico')}}">

{% include myinclude.html %}    {# 模版导入 #}
{{haha()}}
<br>
{{cla()}}
<br>
{{cla().sum(1,2)}}
<br>
<br>
{# 模版中导入模块 #}
{% import time %}
{{ time.time() }}
<br>
{% from util.mod_file import add, upper %}
{{add(3,4)}}
{{upper('a')}}
<br>
{% module UiModule() %}
<br>
{{ methods() }}
<br>
{# 把end之前的内容放到 upper方法里执行 #}
{% apply upper %}
    hello<br>
    hahaha{%end%}

<br>
{{ linkify('百度: https://www.baidu.com') }}<br>
{% raw linkify('百度: https://www.baidu.com') %}


{% end %}

  要导入的html模块myinclude.html

<br>
    This is include!
<br>

  方法类mod_file.py

def add(a, b):
    return a + b

def upper(a):
    return a.upper()

  方法类ui_methods.py,里面方法作为函数导入 

'''
this is ui_methods
'''
def methods(self):
    return 'ui_methods'

  方法类ui_methods.py,里面方法作为函数导入 

'''
this is ui_modules
'''
from tornado.web import UIModule

class UiModule(UIModule):
    def render(self, *args, **kwargs):
        return 'my name is ui_modules'

  python类extendtest.py

import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.options
import json
import time
import util.ui_methods
import util.ui_modules

from tornado.options import define, options

define('port', default=8080, help='run port', type=int)
define('version', default='0.01', help='version', type=str)

def function_01():
    return 'This is function_01'

class ClassTest:
    def sum(self, a, b):
        return '{a} + {b} = {c}'.format(a = a, b = b, c = a+b)

class LoginHandler(tornado.web.RequestHandler):
    def haha(self):
        return 'this is haha!'

    def get(self, *args, **kwargs):
        self.write('hello word')
        self.render('mybase_02.html',
                    haha = self.haha,
                    cla = ClassTest,
                    )

application = tornado.web.Application(
    handlers = [
    (r"/index", LoginHandler )],
    debug=True,
    static_path = 'static',
    template_path = 'templates',
    ui_methods=util.ui_methods,
    # ui_modules=util.ui_modules,
    ui_modules={'UiModule':util.ui_modules.UiModule}
)

if __name__ == '__main__':
    tornado.options.parse_command_line()
    print(options.port)
    print(options.version)
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

运行结果:

  

 

posted @ 2018-03-06 03:19  17-王晶龙-58  阅读(272)  评论(0编辑  收藏  举报