tornado 模版语法

取消转义 :

  取消项目转义 :autoescape = None

  取消模版转义:{% autoescape None %}

  取消行转义   :{% raw bd %}

强制转义(行)   :{{escape(bd)}}

循环语句              :if while for
静态文件    :static

  lesson4.py

 # -*- coding:utf-8 -*-

 import tornado.web
import tornado.httpserver
import tornado.options
import tornado.ioloop
import time from tornado.options import define,options define('port', default=8080, help='run port', type=int)
define('version', default='0.0.1', help='version 0.0.1', type=str) class MainHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs):
self.render('template.html') def post(self, *args, **kwargs):
user = self.get_argument('user','none')
psd = self.get_argument('password','none')
bd = '<a href="https://www.baidu.com" target="_blank">百度</a>'
self.render('template02.html',
user = user,
psd = psd,
time = time,
bd = bd,
) class NotFoundHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs):
self.send_error(404) def write_error(self, status_code, **kwargs):
self.render('error.html') application = tornado.web.Application(
handlers = [
(r"/",MainHandler),
(r"/post",MainHandler),
(r"/(.*)", NotFoundHandler),
],
template_path = 'template',
static_path='static',
# autoescape = None, # 整个项目不转义 尽量不要用
debug = True
) if __name__ == '__main__':
print(options.port)
print(options.version)
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

template.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template_lesson4</title>
<style>
div{
margin: 30px
}
</style>
</head>
<body>
<div>
hello world !
<form method="post" action="/post" target="_blank"> <p>用户名<br><input type="text" name="user"></p> <p>密码<br><input type="password" name="password"></p> <input type="submit"> </form>
</div>
</body>
</html>

  template2.html   ----> 本文重点

 <!DOCTYPE html>
{# autoescape None #} <!--仅在此模版去除转义 尽量不要用-->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template02_lesson4</title>
<style>
div{
margin: 30px
}
a{
text-decoration:none;
}
</style>
</head>
<body>
<div>
登录成功 ! <br>
用户名:{{user}} &nbsp;&nbsp; 密码:{{psd}} <br> {% for i in range(1,9) %} <!--百分号表示执行python语句-->
{% set i = i*3 + 1 %}
i = {{i}} &nbsp;
{% end %} <!--这里必须有 end -->
<br> {% set a = 1 %}
{% while a < 5 %}
{% set a += a*2 %}
a = {{a}} &nbsp;
{% end %} <!--这里必须有 end -->
<br> {% set b = 1 %}
{% if b < 5 %}
{% set b += 1 %}
b = {{b}} &nbsp;
{% end %} <!--这里必须有 end -->
<br> 时间戳1 :{{ time.time() }}
<br> 时间戳2 :{# time.time() #} <!--井号表示注释掉了不执行 不显示-->
<br>
时间戳3 :{{! time.time() }} <!--感叹号表示不转义 感叹号前面无空格-->
<br>
百度链接1: <a href="https://www.baidu.com" target="_blank">百度</a> <br> 百度链接2: {{bd}} <br> <!--花括号里的链接不会被Html解析--> 百度链接3: {% raw bd %} <br> <!--raw 此行取消转义, html 会解析--> 百度链接4: {{escape(bd)}} <br> <!--escape 此行强制转义, 不会被Html解析-->
</div>
<div>
{% set i = 0 %}
{% if i < 1 %}
<img src="static/imgs/01.jpg" width="300px" height="200px"> <!--静态文件的两种添加方式-->
<img src="{{ static_url('imgs/02.jpg') }}" width="300px" height="200px"> <!--静态文件的两种添加方式-->
{% end %}
<br>
</div> </body>
</html>

tornado 模版的更多相关文章

  1. tornado 模版继承 函数和类的调用

    模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...

  2. Tornado详解

    1.Tornado路由系统 1.1 Tornado程序示例 新建一个tornadodemo.py, import tornado.ioloop import tornado.web user_info ...

  3. tornado中使用Mako模版

    tornado是一个优秀的python的开源web 框架,框架本身的性能确实很好,但是他自带的模版只能说是一般般.关于tornado的详细信息可以直接到管网参考. http://www.tornado ...

  4. tornado中通用模版

    第一: 1.Pycharm新建python项目(不是django项目),在项目下面直接新建server.py,内容如下: 2.安装tornado, pip install tornado import ...

  5. tornado-模版reverse_url

    from tornado.web import url handler=[ url(r"/hello", grab_handler.HelloHandler, name='hell ...

  6. Python框架之Tornado(三)请求

    概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3 系列所有步骤,如上图[start]是一个死循环,其中利 ...

  7. Python框架之Tornado(二)请求阶段

    概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) ...

  8. 第三篇:白话tornado源码之请求来了

    上一篇<白话tornado源码之待请求阶段>中介绍了tornado框架在客户端请求之前所做的准备(下图1.2部分),本质上就是创建了一个socket服务端,并进行了IP和端口的绑定,但是未 ...

  9. 第二篇:白话tornado源码之待请求阶段

    上篇<白话tornado源码之一个脚本引发的血案>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是torna ...

随机推荐

  1. [luogu1654]OSU!

    update 9.20:本篇题解已经被\(yyb\)证明是出锅的 这道题目最后的式子看上去是很简单的,不到10行就码完了,但是求式子的过程并没有那么简单. 很容易想到一种枚举思路: 因为每一段连续的1 ...

  2. [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序

    ---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...

  3. HDU5957 Query on a graph(拓扑找环,BFS序,线段树更新,分类讨论)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5957 题意:D(u,v)是节点u和节点v之间的距离,S(u,v)是一系列满足D(u,x)<=k的点 ...

  4. [samba]samba设置指定用户权限

    步骤: 1.在系统中添加用户 批量添加用户和密码的方法(因为samba用户要求必须在系统中存在): for name in a b c d;do useradd $name ; echo " ...

  5. WPF:为什么使用ContentPresenter.ContentSource而不是Content属性?

    因为ContentPresenter.ContentSource比Content属性加一个TemplateBinding看起来更方便?不仅仅是这些,实际上如果用ContentSource的话,Cont ...

  6. transition和animation概况

    有人可能会有疑问,CSS3动画不是只有animation一个属性吗?怎么又和转化(transform)和过渡(transition)扯上关系了,其实并非如此,转化(transform)属性让动画的变换 ...

  7. linux查看内存cpu占用

    linux查看内存cpu占用top 命令  按q退出 可以添加额外选项选择按进程或按用户查看如: top -u gitu PID:进程idPR:进程的优先级别,越小越优先被执行NInice:值VIRT ...

  8. Vue.js -- 过滤器

    VueJs中的过滤器基础 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数.Vue有很多很便利的过滤器,可以参考官方文档, http://cn.vuejs.org/api/ ...

  9. bzoj1862/1056: [Zjoi2006]GameZ游戏排名系统

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.ph ...

  10. 【NOIP】提高组2012 同余方程

    [算法]扩展欧几里德算法 [题解]学完扩欧就可以随便水了... 转化为不定方程ax-by=1. 因为1且题目保证有解,所以方程有唯一解. 紫书曰:同余方程的一个解其实指的是一个同余等价类. 所以满足x ...