tornado 04 模板

Posted 许铖铖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tornado 04 模板相关的知识,希望对你有一定的参考价值。

一、模板

#通过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>

 

以上是关于tornado 04 模板的主要内容,如果未能解决你的问题,请参考以下文章

认识tornado

有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?

tornado之模板扩展

tornado之表单和模板

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

web框架--tornado框架之模板引擎继承