2019独角兽企业重金招聘Python工程师标准>>>

参考地址

http://www.tornadoweb.org/en/stable/guide/templates.html?highlight=render#ui-modules

目的说明

osc的所有页面顶部都有这个导航条, 我们可以使用tornado的UI modules来实现导航条,实现代码的复用.

代码结构

增加了一个my_uimodules.py,里面包含了供tornado模板使用的uimodules,增加了一个header.html里面是导航条的html代码,增加了一个page2.py,返回简单的html页面page2.html.

实际运行效果

访问路径 "/"时的效果

点击导航链接  "页面1"的效果

点击导航链接  "页面2"的效果

代码说明

my_uimodules.py

import tornado.webclass HeaderBar(tornado.web.UIModule):def render(self, location):return self.render_string("header.html", location=location)class HeaderBar2(tornado.web.UIModule):def render(self, location):return self.render_string("header.html", location=location)

所有的模板驱动都继承自    tornado.web.UIModule  , 然后调用render_string调用指定的模板和参数.  你可以在此处写一个顶部导航栏再写个侧边导航栏.  我只在这里写了一个顶部导航模板驱动. 它接受一个参数location, 我把它作为导航栏最右侧的页面说明. 本模板驱动返回的是header.html,并把location传给了它.

header.html

<div><a href="/">主页</a><a href="/page1">页面1</a><a href="/page2">页面2</a><span>你现在处于页面 {{ location }}</span>
</div>

本模板文件作为页面的顶部导航栏,并通过location参数得到当前的页面地址

main.py

import osimport tornado.httpserver
import tornado.ioloop
import tornado.webimport my_uimodules
from handlers.home import HomeHandler
from handlers.page1 import Page1Handler
from handlers.page2 import Page2Handlerclass PageNotFoundHandler(tornado.web.RequestHandler):def get(self):return self.write_error(404)class Application(tornado.web.Application):def __init__(self):handlers = [(r"/", tornado.web.RedirectHandler, {"url": "/home"}),(r"/home", HomeHandler),(r"/page1", Page1Handler),(r"/page2", Page2Handler),(r".*", PageNotFoundHandler),]settings = dict(static_path= os.path.join(os.path.dirname(__file__), "static"),template_path=os.path.join(os.path.dirname(__file__), "templates"),ui_modules=my_uimodules,)tornado.web.Application.__init__(self, handlers, **settings)if __name__ == "__main__":port = 8899application = Application()http_server = tornado.httpserver.HTTPServer(application, xheaders=True)http_server.listen(port)print('Listen on http://localhost:{0}'.format(port))print('Listen on http://localhost:{0}/page1'.format(port))print('Listen on http://localhost:{0}/page2'.format(port))tornado.ioloop.IOLoop.instance().start()

在torndao进行初始化设置时, 在settings 里面指定了自定义模板所在模块.

"ui_modules=my_uimodules"

当tornado在处理模板时,如果碰到如下的语句,  它就会去刚才设置的ui_modules模块中去找 xxxx模板驱动

{% module xxxx %}

页面代码

home.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>主页</title>
</head>
<body>{% module HeaderBar("主页") %}<h1 id="home_head">这是主页</h1><script src="/static/js/home.js"></script>
</body>
</html>

page1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ argu1 }}</title>
</head>
<body>{% module HeaderBar("页面1") %}<h1>这是Page1</h1><ul>{% for i in argu2 %}<li>{{ i }}</li>{% end %}</ul></body>
</html>

page2.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Page2</title>
</head>
<body>{% module HeaderBar("页面2") %}<h1>这是Page2</h1>
</body>
</html>

所有页面模板的body的第一行都添加了一个 {% module HeaderBar("页面2") %} ,如前面所讲当tornado在处理render的模板时如果碰到了这种格式的请求,就会去 ui_modules 指定的模块my_uimodules下面查找HeaderBar,并把"页面2"作为第一个参数传给了它, HeaderBar把这个参数当做location传给了 header.html.

就这样每个页面顶部导航栏的相同和不同之处都体现了出来.

代码git地址

http://git.oschina.net/donggen/tornado-test

转载于:https://my.oschina.net/u/111188/blog/671517

tornado总结4-html模板使用2相关推荐

  1. Tornado,展示一下模板渲染

    按网上一步一步走一下. 感觉模板和DJANGO的差不多,但更灵活,不限制PYTHON的使用. 前端和后端,这模板使用的规则在哪里呢? import os.pathimport tornado.http ...

  2. Tornado框架中视图模板Template的使用

    上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler):def get(self):self.write(''' <html& ...

  3. tornado 入门

    Overview FriendFeed是一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 weba ...

  4. tornado框架基础05-模板继承、UImodul和UImethods

    01 模板继承 父模板​ <html lang="en"> <head>     <meta charset="UTF-8"> ...

  5. 自学Python第二十六天- Tornado 框架

    自学Python第二十六天- Tornado 框架 安装及基础引用 创建.配置.初始化应用及简单运行服务 创建应用 对 app 进行设置 另一种设置方法 一些其他的配置 关于调试模式 设置路由处理器 ...

  6. Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总

    原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cookiecutter的基础使用,而且会删除与功能使用无关的部分.深度使用及了解 ...

  7. Tornado编程基础

    第一章:引言 在过去的五年里,Web开发人员的可用工具实现了跨越式地增长.当技术专家不断推动极限,使Web应用无处不在时,我们也不得不升级我们的工具.创建框架以保证构建更好的应用.我们希望能够使用新的 ...

  8. Cookiecutter

    Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总 原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cook ...

  9. 2.Python3标准库--文本

    (一)string:文本常量和模板 1.函数 import string ''' string模块在最早的Python版本中就已经有了.以前这个模块中提供的很多函数已经移植到str对象中,不过这个模块 ...

  10. 廖雪峰老师Python教程读后笔记

    廖老师网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 花几天时间看了廖老师的 ...

最新文章

  1. 10个免费在线逻辑关系图表图形设计制作工具
  2. (0048)iOS开发之内存管理探究
  3. webpack+vue搭建基础
  4. DSP2812程序执行过程
  5. yum php fpm5.6,CentOS 7 yum 安装php5.6
  6. HDU 5400 Arithmetic Sequence
  7. 残疾人软件开发_残疾人应该使用Linux的6个理由
  8. [原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
  9. java 获取类的注解_Java 自定义注解通过反射获取类、方法、属性上的注解
  10. 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
  11. 计算机网络—物理层的传输介质以及物理层设备
  12. 系统设计的原则、特点与任务
  13. 增量关联规则挖掘—FUP算法
  14. 《我想进大厂》之分布式锁夺命连环9问 | 大理版人在囧途
  15. 12306泄露数据可视化分析
  16. 艾司博讯:在拼多多开店都有什么步骤
  17. vite简介,使用vite创建项目的优势
  18. 数组(一维数组与二维数组)
  19. 网络压线钳的实验报告_RJ45网线制作实验报告
  20. 清华大学鲍橒计算机1999,《最强大脑》观察员学历:鲍橒清华,王峰武大,DR魏非211...

热门文章

  1. 【汇编】addr dw number number dw Y的意思:在ADDR单元中存放着数Y的地址
  2. flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥
  3. python代码标识码_代码分享:使用Python和Tesseract来识别图形验证码
  4. 金三银四,那浏览器兼容你知多少?
  5. System Center 2012 R2 CM系列之Configuration Manager系统需求
  6. AppStore刷榜那些事儿:猪,也是这么想的
  7. .NET 设计规范--.NET约定、惯用法与模式--5.成员设计
  8. 个性化你的IE,把你的名字刻在IE上!
  9. 当子查询内存在ORDER BY 字句时查询会报错
  10. Unity游戏接入TypeSDK集成笔记