1. import tornado.ioloop
  2. import tornado.web
  3. import tornado.httpserver # 非阻塞
  4. import tornado.options # 提供了多种选择 python xxx.py --port=xxxx
  5. from tornado.options import define,options
  6.  
  7. import util.ui_methods
  8. import util.ui_modules
  9.  
  10. define('port',default=8000,help='run port',type=int) # windows通过Ctrl+鼠标左键
  11. define('version',default=0.1,help='version',type=str)
  12.  
  13. class ExtHandler(tornado.web.RequestHandler):
  14. def haha(self):
  15. return 'succeed to use haha'
  16.  
  17. def get(self):
  18. self.render("five-extend.html",
  19. haha=self.haha,            # 引用haha函数
  20. new=New,
  21. )
  22.  
  23. class New:
  24. def area(self,a,b):
  25. return a*b
  26.  
  27. application = tornado.web.Application(
  28. handlers=[ # 列表按顺序匹配
  29. (r"/ext", ExtHandler),
  30. ],
  31. template_path='templates', # 表明页面html的路径
  32. static_path='static',
  33. ui_methods=util.ui_methods,               # 导入ui_methods函数
  34. ui_modules=util.ui_modules,               # 等同下 dict 导入类 ui_modules
  35. # ui_modules={'UiModule':util.ui_modules.UiModule},
  36. debug=True, # 上传代码后服务器自动重启
  37.  
  38. )
  39.  
  40. if __name__ == '__main__':
  41. tornado.options.parse_command_line() # 通过sys.arg获取命令行输入参数(python xxx.py --port=xxx)
  42. print(options.port)
  43. print(options.version)
  44. http_server = tornado.httpserver.HTTPServer(application) # 非阻塞
  45. application.listen(options.port)
  46. tornado.ioloop.IOLoop.instance().start() # 启动io循环

extend,及函数,类的导入

  1. {% extends five-moudle.html %}
  2.  
  3. {%block title1%}Extend{% end %}
  4.  
  5. {%block body%}
  6. this is tornado extend
  7.  
  8. {% include five-include.html %}
  9.  
  10. {% include five-include.html %} <br>
  11.  
  12. {{ haha() }} <br> 调用haha函数
  13. {# 类的地址 #}
  14. {{ new }} <br>
  15. {# 类实例 #}
  16. {{ new() }} <br>
  17.  
  18. {{ new().area(2,3) }} <br>
  19.  
  20. {% import time %}                   导入time函数
  21. {{time.time()}} <br> 使用time.time
  22.  
  23. {% from util.mod_file import add,upper %}    从util.mod_file模块导入函数add,upper
  24. {{add(22,11)}} <br>
  25.  
  26. {% module UiModule() %} <br>           调用UiModule这个类
  27. {{ methods1() }} <br>                调用UiModule这个类的methods1方法
  28.  
  29. {% module Advertisement() %} <br>
  30.  
  31. {% apply upper %}                  了解apply ,linkify
  32. hello world
  33. {% end %} <br>
  34.  
  35. {% raw linkify('百度链接:https://www.baidu.com') %}
  36.  
  37. {% end %}
  1. # 知识点
  2.  
  3. # 模板
    # 继承模板extend
    #{% extends 父模板.html %} 子模版继承父模板所有的内容
    # block块子模版重写父模板内容 name相当于变量
    # 1.{% block name %} 父模板中的内容 {% end %}}
    # 2.{% block name %} 在子模版修改新的内容 {% end %}}
    # 单继承就好,别多继承。html不会报错所以可以继承多个页面
  4.  
  5. # 在子模版中新增内容 include (多个html相同的不完整html内容,把内容写在一个模板通过include导入)
    # 在继承(extend)的模块里新增内容
    # five-include.html为新增的内容
    # 写在extend的子模版需要新增内容的位置{% include five-include.html %}
    # 一般include的模块中不使用block块和extend
  6.  
  7. # 在模板中导入函数
    # 先在render方法加上 haha = self.haha, 类里面的一个函数调用类的另一个函数 self.haha
    # 再通过 子模版 {{ haha() }} 调用
  8.  
  9. # 在子模板中导入类
    # 情况一 通过tornado渲染
    # 导入父模板中New这个类
    # 在render方法中加入 new = New,
    # 在extend子模版中写入
    # {{new}} 类本身
    # {{new()}} 类的实例
    # {{new().area(2, 3)}} 类的area方法
    # 情况二 import 和 from import
    # 子模版导入另一个模板里面的类 util为文件名
    # 1. {% from util.mod_file import add %}
    # 2. {{add(2+3)}}
    # 情况三 更好点
    # 在父模板中导入导入其他模板的函数和类
    # 1.新建函数文件ui_methods,py和类文件ui_modules.py
    # 分别写入 函数 和 类
    #函数 def methods1(self): # 加上self
    # return 'this is ui_methods1'
  10.  
  11. #类 from tornado.web import UIModule
    # class UiModule(UIModule): # 类需要继承UIModule
    # def render(self, *args, **kwargs): # 并重写render方法
    # return '我是 ui_modules'
    # 2.在项目中导入
    # import util.ui_methods
    # import util.ui_modules
    # 3.配置application参数
    # ui_methods = util.ui_methods,
    # ui_modules = util.ui_modules, 等同下 dict的形式
    # 类名 路径
    # ui_modules={'UiModule':util.ui_modules.UiModule},
    # 4.在子模板中调用
    # {% module UiModule() %} 类
    # {{ methods1() }} 函数
    # 了解
    # {% apply upper %} hello world {% end %} def upper(a): return a.upper() 将所有的字符串都在upper执行一边
      # {% raw linkify('百度链接:https://www.baidu.com') %} 将内容变成a链接
  1.  

tornado-模板继承extend,函数和类的导入的更多相关文章

  1. python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)

    昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  2. Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介

    没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...

  3. thinkphp 中区块block和模板继承extend用法举例

    1.介绍 模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义 ...

  4. Django 模板继承extend 标签include block

    # block 站网页位置# includ 导入网页标签# extends 导入网页模板 # common_js.html <script src="/static/plugins/j ...

  5. tornado 模版继承 函数和类的调用

    模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...

  6. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  7. 模板继承(extend)——(Day68)

    模板继承 (extend) Django模版引擎中最强大也是最复杂的部分就是模版继承了.模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 block ...

  8. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  9. 模板继承和UImodul 和 UImethods

     模板继承和UImodul 和 UImethods 模板的继承 {% extends path %} path为templates下的相对路径 {% block block_name %}conten ...

随机推荐

  1. [LeetCode&Python] Problem 476. Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  2. each遍历 的原理

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  3. ppt罗列项排版

    关于罗列项的排版(1,....2,......3,......4,........)

  4. stenciljs 学习六 组件开发样式指南

    组件不是动作,最好使用名词而不是动词, 文件结构 每个文件一个组件. 每个目录一个组件.虽然将类似的组件分组到同一目录中可能是有意义的,但我们发现当每个组件都有自己的目录时,更容易记录组件. 实现(. ...

  5. pipelinedb 滑动窗口

    滑动窗口可以方便的让我们进行一段时间的数据分析 几个主要函数 clock_timestamp 内置的函数,总是返回当前的时间戳 arrival_timestamp 事件达到的时间 单滑动窗口 参考 C ...

  6. oracel SQL多表查询优化

    SQL优化 1.执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就 ...

  7. MySQL中UNSIGNED和ZEROFILL的介绍

    UNSIGNED: 将数字类型无符号化,这与C和C++这些程序语言的unsigned含义相同. INT的类型范围-2 147 483 648~2 147 483 647 INT UNSIGNED范围0 ...

  8. commons-logging log4j logback 知识点

    log4j 2,需要导入2个jar包: log4j-core-xx.jar log4j-api-xx.jar log4j 2 的 properties 配置文件名字为: log4j2.properti ...

  9. java 报错及解决

    java文件编译报错:error: unmappable character for encoding ASCII 解决: 编译时:javac -encoding utf-8 TestJava.jav ...

  10. bzoj 4566 [Haoi2016]找相同字符——广义后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4566 每个后缀结尾处 ct[ ] = 1 ,按拓扑序 dp 一下就能求出 right 集合的 ...