zoukankan      html  css  js  c++  java
  • tornado 04 模板

    一、模板

    #模板就是一个HTML文件,只是其中添加了模板语法,需要服务器的渲染才能正常显示数据
    #通过render可以返回一个html网页,不过那都是固定的页面,固定的数据,如果数据是不确定的,是会不断改变的,该如何做?
    #先把页面写好,然后预留出固定的位置,在需要的时候再填入数据即可
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('template')
            self.render('lesson2.html')
    
        def post(self, *args, **kwargs): #在页面内动态地传入参数
            name = self.get_body_argument('name','no')
            # self.write(name)
            self.render('lesson04_templates.html', #提交以后的页面应该跳转为这个页面,而不是仅仅输出一个name
                        username = name #提取body属性,将name赋值给username
                        )
    #模板 
    #在tornado中,模板就是一个html文件,但是模板通过模板语法,由tornado服务渲染之后,可以动态地往页面填入数据
    #tornado自带模板语法,不需要再用其他的模板插件

    二、模板符号

    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('template')
            self.render('lesson2.html')
    
        def post(self, *args, **kwargs): #在页面内动态地传入参数
            name = self.get_body_argument('name','no')
            urllist = [
                ('http://www.baidu.com','去百度'),
                ('http://www.shiguangkey.com','去时光'),
                ('http://www.zhihu.com','去知乎')
            ]
            # self.write(name)
            self.render('lesson04_templates.html', #提交以后的页面应该跳转为这个页面,而不是仅仅输出一个name
                        username = name ,#提取body属性,将name赋值给username
                        time = time,
                        urllist = urllist
                        )
    <body>
    #代表一个python表达式
    hello  {{ username }} #大括号可出输出变量的值
    <br>
    {{ 1+1 }} # 输出计算结果
    <br>
    {{ a = time.time() }} #输出执行方法(当前的时间戳),必须加括号,不然就是一个函数对象
    <br>
    
    #代表一个指令
    {% if username != 'xuwei' %}
        欢迎{{ username}} 登录
    {% else %}}
        请登录
    {% end %}   #使用if必须要用end结束,因为模板跟python一样不是以缩进来约束代码块
    <br>
    
    #代表一个注释
    <!--{{ a = time.time() }}--> #在这里虽然被注释掉了,但是在页面运行的时候,页面不会显示,但是这个表达式还是运行了,只不过是在源代码会显示时间戳
    <!--{#a = time.time() #}-->  #这样才是注释,页面不会显示,源代码也不会
    <br>
    
    #代表输出源码。不执行,加个!即可
    {{! 1+1 }} #这样可以向页面输出源码,不会输出运行结果
    
    #for循环
    {% for i in urllist  %}
        {{ i }}
        <a href="{{ i[0] }}" target="_blank"> {{ i[1]}}</a>
    {%  end %}
    
    # while循环
    {% set a = 0 %} #在调用while是时候需要定义a,这就需要使用set
    {% while a <5 %}
        {{ a }}<br>
        {% set a += 1 %}
    {% end %}}
    
    </body>

    三、模板的转义

    #如果给的是一个html文件,模板会不会解析
        def post(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.write(name)
            self.render('lesson04_templates.html',
                        username = name ,
                        time = time,
                        urllist = urllist,
                        atga = atga
                        )
    
    application = tornado.web.Application(
            handlers=[
                (r'/tem',MainHandler),
            ],
            template_path = 'templates',
            autoescape = None, #在这里面加上这个也可以去除所有的转义       全局去转义
            debug=True
        )
    <!DOCTYPE html>
    {% autoescape None %}  #对所有的内容都去除转义,不需要在下面再添加了,也可以在前民               模板级别去转义
    <html lang="en">
    <head>
    <br>
    {{ atga}} #这样会直接把源码显示在网页中,不解析 ;会将字符串里面的标签转化为其它的符号,进而也就不解析了,但是显示在也页面的时候又会解析成原来的标签(这便就是转义)
    {% raw atga %} #加个一个raw 就可以解析(局部去除上面的转义)了          局部去转义
    
    <br>
    {{ escape(atga) }} #这样依然会转义

    四、静态文件引用

    #有时候需要返回一些图片,那么如何返回这些静态文件呢
    
    #1、先导入图片,放到static/images/  2、然后在application中设置好静态文件的路径 static_path='static'     3 、在html文件中用两种方法导入
    application = tornado.web.Application(
            handlers=[
                (r'/tem',MainHandler),
            ],
            template_path = 'templates',
            static_path= 'static', #标准写法,设置静态文件的路径
            autoescape = None,
            debug=True
    
        )
    {% if username != 'no' %}
        欢迎{{ username}} 登录
        <img src="{{ static_url('images/1.jpg')}}" width="250" height="250"> #这两者的区别在于url不同,再次请求是,这个路径会直接在缓存中找图片,不用重新下载,效率更高一点
        #使用此方法时,tornado会自动给静态文件添加版本号,如果版本号更改了,浏览器会自动地缓存新的文件
        <img src="static/images/1.jpg"  width="250" height="250">
        #在tornado模块中,static是个关键字,能够自动替换成static_path后的内容
    
    {% end %}
    </body>
  • 相关阅读:
    zoj 3195 Design the city LCA Tarjan
    hdu 2586 How far away ? 离线LCA
    洛谷 P3379 【模板】最近公共祖先(LCA)Tarjan离线
    codeforces #446 892A Greed 892B Wrath 892C Pride 891B Gluttony
    设计模式(16)---原型模式
    设计模式(15)---享元模式
    设计模式(14)---组合模式
    设计模式(13)---外观模式
    设计模式(12)---适配器模式
    设计模式(11)---代理模式
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8982524.html
Copyright © 2011-2022 走看看