模板继承和UImodul 和 UImethods
- 模板的继承
- {% extends path %}
- path为templates下的相对路径
{% block block_name %}content{% end %}
- block_name:块名字
- content:中间包裹的内容
- 和django的block一致
- {% include path %}
- 包含的模板路径
- 参考链接:https://www.cnblogs.com/ivy-blogs/p/10654806.html
- {% extends path %}
- 函数跟类的导入:
- UImodul和UImethods
- 新建个util包
- 在里面新建uimethods.py和uimodules.py两个文件
- 在定义app的路由所在的文件下导入这两个文件
- Application给ui_methods和ui_modules传参等于导入的文件名
1 from tornado.web import RequestHandler, Application 2 from tornado.httpserver import HTTPServer 3 from tornado.options import options, define 4 from tornado.ioloop import IOLoop 5 from util import uimethods, uimodules 6 7 define('port', default=7981, type=int) 8 9 10 class IndexHandle(RequestHandler): 11 def get(self): 12 self.render('index.html') 13 14 15 application = Application( 16 handlers=[ 17 (r'/', IndexHandle) 18 ], 19 template_path='templates', 20 ui_methods=uimethods, 21 ui_modules=uimodules 22 ) 23 24 if __name__ == '__main__': 25 options.parse_command_line() 26 app = HTTPServer(application) 27 app.listen(options.port) 28 IOLoop.current().start()
- ulmethods使用
- def test(self): return 'test'
- ulmethods里面的方法第一个参数必须为self
- ulmodules使用
-
1 from tornado.web import UIModule 2 3 class TestModule(UIModule): 4 def render(self, *args, **kwargs): 5 return 'TestModule'
先建的类必须继承自UIModule类,当该类实例化的时候,会自动执行render方法
-
1 from tornado.web import UIModule 2 3 class TestModule(UIModule): 4 def render(self, *args, **kwargs): 5 self.render_string('index.html')
渲染页面
-
1 from tornado.web import UIModule 2 3 class TestModule(UIModule): 4 def render(self, *args, **kwargs): 5 self.render_string('index.html') 6 7 def javascript_files(self): 8 return 'your javascript_files path' 9 10 def css_files(self): 11 return 'your jcss_files path'
静态资源加载,如果路径有多个,则返回列表形式
-
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 {% module TestModule() %} 9 <br> 10 {{ test() }} 11 </body> 12 </html>
具体使用
-
- 模板的其他命令
-
1 def test(self): return 'test' 2 3 4 5 def upper(self, text): 6 if isinstance(text, str): 7 return text.upper() 8 raise TypeError
在ulmethod里面定义一个upper方法
-
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 {{ upper('hello') }} 9 </body> 10 </html>
使用该方法
- 当传入的参数比较大的时候,这种方法显得不太美观
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 {% apply upper %} 9 asdasdasddddddddd 10 {% end %} 11 </body> 12 </html>
apply可以扩大后面方法的作用范围,以end结尾
-
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 {{ linkify ('http://www.baidu.com') }} 9 {% raw linkify ('http://www.baidu.com') %} 10 </body> 11 </html>
linkify后接一个元祖,会自动识别元祖内的url,将其解析为a标签,但需要取消转译
-