模板继承和UImodul 和 UImethods

 模板继承和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
  • 函数跟类的导入:
  • 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标签,但需要取消转译

原文地址:https://www.cnblogs.com/ivy-blogs/p/10813909.html