博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tornado总结4-html模板使用2
阅读量:5789 次
发布时间:2019-06-18

本文共 3211 字,大约阅读时间需要 10 分钟。

hot3.png

参考地址

目的说明

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

130542_H4Xz_111188.png

代码结构

143029_xUJP_111188.png

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

实际运行效果

访问路径 "/"时的效果

143447_1bdT_111188.png

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

143550_stNP_111188.png

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

143618_SCPm_111188.png

代码说明

  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

    
主页    
页面1    
页面2    
你现在处于页面 {
{ location }}

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

144536_IHY2_111188.png

  main.py

import osimport tornado.httpserverimport tornado.ioloopimport tornado.webimport my_uimodulesfrom handlers.home import HomeHandlerfrom handlers.page1 import Page1Handlerfrom 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 = 8899    application = 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

    
    
主页    {% module HeaderBar("主页") %}    
这是主页    

   page1.html

    
    
{<div></div> { argu1 }}    {% module HeaderBar("页面1") %}     

这是Page1

     
           {% for i in argu2 %}         
  • {
    { i }}
  •        {% end %}     

   page2.html

    
    
Page2    {% module HeaderBar("页面2") %}     

这是Page2

  

所有页面模板的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

你可能感兴趣的文章
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
L104
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>
商教助手!解析夏普液晶高清宽屏投影机系列
查看>>
云南去年有望实现151万贫困人口净脱贫
查看>>
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>