tornado 05 模块继承
一、模板继承
#问题:在浏览网页的时候,很多页面上很多部分其实是重复的,那这些部分在每个页面都去写一次吗? #不是,这只不过是通过继承实现的
#模板继承 #在字模板中写上 {% extends ./lesson05_base.html %} 就可以继承父模板的所有内容了
#子模板内容修改 #在父模板中 写好块 {% block title1 %} Tornado {% end %} , 哪个部分需要修改就在block后面,然后在子模板中直接用相同的块并且在块内部修改内容即可,body、JS 同理,block后面的名字可以任意取,最好见名知意
#如果想要添加子模块 {% block body %} 许铖铖不帅 {% include ./lesson05_include.html %} #通过include导入html即可 {% end %}
二、函数和类的导入
#函数的导入只需要在 render里面将函数赋值给变量,然后在模板里面调用即可 #类导入同理
class MainHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): name = self.get_body_argument('name','no') urllist = [ ('http://www.baidu.com','去百度'), ('http://www.shiguangkey.com','去时光'), ('http://www.zhihu.com','去知乎') ] atga = """<a href="https://www.baidu.com" target="_blank"> _____走 去百度_____</a>""" self.render('lesson05_extend.html', username = name , time = time, urllist = urllist, atga = atga, haha = haha ,#导入函数 cal = Calculation #导入类 )
#这种方法不利于前段端分离
还有一种方法
{% import time %} {{ time.time() }} #也可以直接用import 导入类
{% from util.mod_file import add %} #从util文件夹中的mod_file.py文件中导入函数add
三、UI_modules 和 UI_methods
#如果函数或类需要在很多个模板中被导入,那该如何做
#在util文件夹里面创建两个py文件 ui_methods.py和ui_modules.py(这两文件名都是随便改的) #在extend_05.py文件里面导入这两个文件 #在render(渲染)里面讲这两个文件名赋值 #可以再模板里面直接用着py文件里面定义的函数、类 #函数的运用是 {{ 调用函数 }} {% module 调用类 %} #ui_methods.py文件里面的定义函数必须加self
例子
class Advertisement(UIModule): def render(self, *args, **kwargs): return self.render_string('lesson05_ad.html') def css_files(self): return '/static/css/King_Chance_Layer7.css' def javascript_files(self): return [ '/static/js/jquery_1_7.js', '/static/js/King_Chance_Layer.js', '/static/js/King_layer_test.js' ]
四、模板其他命令
apply
#使用apply语句,使用函数的作用范围到最近的{% end %}位置
{% apply upper %} xuchengcheng <br> gaoqi {% end %}
linkify
#linkify 生成一个链接,但是要注意模板转义
{{ linkify('百度: https:www.baidu.com') }} <br> {% raw linkify('百度: https:www.baidu.com') %} #给括号里面的部分加个a标签