模板基础

模板:html

在tornado中,模板就是一个html文件,可是模板经过模板语法,由tornado服务渲染以后,能够动态的往页面中填入数据 。tornado自带模板语法,不须要再用其余的模板插件python

模板初识:web

以前咱们经过render能够返回一个html页面,不过那都是固定的页面,固定的数据,可是若是数据是不肯定的,是会不断改变的,该怎么作呢?express

是否能够先把页面写好,而后预留出固定的位置,在须要的时候再填入数据便可?浏览器

04-templates.py文件:app

import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
from tornado.web import RequestHandler
from tornado.options import define,options

define('port',default=8080,help='run server',type=int)


class MainHandler(RequestHandler):
    def get(self):
        self.render('in_out.html')
    def post(self):
        name = self.get_argument('name','')
        self.write(name)


class TemHandler(RequestHandler):
    def get(self):
        self.write('hello world')
    def post(self):
        name = self.get_argument('name','')
        self.render('02-templates.html',username= name)

application = tornado.web.Application(
    handlers=[
        (r'/',MainHandler),
        (r'/tem',TemHandler),
    ],
    debug=True,
    template_path = 'templates',
    static_path='static'
)
if __name__ == '__main__':
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

请求的html表单,in_out.html:tornado

<body>
    <form method="post" action="/tem">
        <p>用户名<input type="text" name="name"></p>
        <p>密码<input type="password" name="password"></p>
        <input type="submit">
    </form>
</body>

返回的html模板,02-templates.htmloop

<body>
    欢迎 {{ username }} 登录
</body>

 

模板语法,模板符号:post

{{ expression }}google

用 {{ expression }} 中间是任何 python 表达式,或者是一个变量

{% directives %}

其余的模板指令

{# … #}

在模板中要注释python表达式的运行,须要使用这个模板语法

{{! {%! {#!

若是不想执行内容,须要在页面上打印出模板符号,只须要加上感叹号( ! )便可。输出源代码

控制语句:if判断

在模板中可使用 if 判断   注意:最后须要以 {% end %} 结尾

实例以下:

<body>
    欢迎 {{ username }} 登录
    <br>
    {{ 1+1 }}
    <br>
    {{ time.ctime() }}
    <!--两个大括号能够运行python的表达式-->
    <br>
    <br>
<!--控制流程-->   {#% %#}
    {% if username !='' %}
        欢迎 {{ username }} 登录
    {% else %}
        请登陆
    {% end %}
    <br>
    <br>
    <!--{{ time.ctime() }} 这种方式会在后台仍然执行 下面使用{# #}注释语法-->
    {# time.ctime() #}

    <br>
    <!--不进行运算,将表达式显示在页面-->
    {{! 1+1 }}  

</body>

循环语句:

for 循环:

在 tornado 模板中可使用 for 循环 注意:最后须要以 {% end %} 结尾

while 循环:

在 tornado 模板中可使用 while 循环 注意:最后须要以 {% end %} 结尾

python文件中传入变量:

class TemHandler(RequestHandler):
    def get(self):
        self.write('hello world')
    def post(self):
        urllist=[
            ('http://www.baidu.com','百度一下'),
            ('http://www.zhihu.com','知乎'),
            ('http://www.google.com','谷歌'),
        ]
        name = self.get_argument('name','')
        self.render('02-templates.html',
                    username= name,
                    time = time,
                    urllist = urllist,
                    )

模板文件展现:

<body>
     {% for i in urllist %}
    <a href="{{ i[0] }}" target="_blank">{{ i[1] }}</a>
    <br>
    {% end %}
    <br>
    <!--须要提早设置-->
    {% set a =0 %}
    {% while a < 8 %}
        {{ a }} <br>
    {% set a+=1 %}
    {% end %}
</body>

选择模板类型:File--->Setting--->Python Template Languages  (jinja2)

模板转义

转义:

页面并无解析,只是看成一个字符串,直接在页面上打印出来 tornado默认是自动的转义,传入的数据都会看成字符串,不会被浏览器解析

class TemHandler(RequestHandler):
    def get(self):
        pass
    def post(self):
        atga ='''
        <a href="http://www.baidu.com" target="_blank">百度一下,你就知道</a>
        '''
        self.render('02-templates.html',
                    atga = atga
                    )

application = tornado.web.Application(
    handlers=[
        (r'/',MainHandler),
        (r'/tem',TemHandler),
    ],
    debug=True,
    template_path = 'templates',
    static_path='static',
    autoescape = None, #全局取消转义
)

模板.html

<!DOCTYPE html>
{#取消整个页面的转义#}
{#{% autoescape None %}#}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Templates</title>
</head>
<body>
{#    raw 局部取消转义#}
{#    {%  raw atga %}#}
    <br>
{#    批量取消转义两种方法,1。取消整个页面的转义。2.取消整个项目的转义#}
    {{ atga }}
    {{ atga }}
    {{ atga }}
    {{ atga }}
    {{ atga }}
    {{ atga }}
{#    局部开启转义#}
    {{ escape(atga) }}
</body>
</html>

 

静态文件引入

设置静态资源目录

application = tornado.web.Application(
    handlers=[
        (r'/',MainHandler),
        (r'/tem',TemHandler),
    ],
    debug=True,
    template_path = 'templates',
    static_path='static',   #设置静态资源文件位置
    autoescape = None, #全局取消转义
)

模板中引入静态资源:static_url为内置方法

两种引入方式

<body>
{% if username !='' %}
    欢迎 {{ username }} 登陆
<img src="static/images/01.jpg" width="200px" alt="">
<img src="{{ static_url('images/02.webp') }}" width="200px" alt="">
{% else %}
    亲,请登陆
{% end %}
</body>

两种静态资源引入的不一样:

相关文章
相关标签/搜索