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="" height=""> #这两者的区别在于url不同,再次请求是,这个路径会直接在缓存中找图片,不用重新下载,效率更高一点
    #使用此方法时,tornado会自动给静态文件添加版本号,如果版本号更改了,浏览器会自动地缓存新的文件
    <img src="static/images/1.jpg"  width="" height="">
    #在tornado模块中,static是个关键字,能够自动替换成static_path后的内容
{% end %}
</body>
tornado 04 模板的更多相关文章
- 学习tornado:模板
		
第一次接触tornado的template,是在做oastub的时候,因为一位同学在handler里面硬编码了html代码,我决定引入template机制来降低逻辑与页面的耦合. 简介 tornado ...
 - Hyper-v  UBUNTU 12.04 模板设置
		
Ubuntu 12.04 模板设置 参考文档 Hyper-v安装ubuntu http://blogs.msdn.com/b/virtual_pc_guy/archive/2012/05/02/ubu ...
 - Tornado之模板
		
知识点 静态文件配置 static_path StaticFileHandler 模板使用 变量与表达式 控制语句 函数 块 4.1 静态文件 现在有一个预先写好的静态页面文件 (下载静态文件资源), ...
 - 第二百六十一节,Tornado框架模板引擎本质
		
Tornado框架模板引擎本质 只需要了解一下即可 本篇就来详细的剖析模板处理的整个过程. 上图是返回给用户一个html文件的整个流程,较之前的Demo多了绿色流线的步骤,其实就是把[self.wri ...
 - 第二百五十九节,Tornado框架-模板语言的三种方式
		
Tornado框架-模板语言的三种方式 模板语言就是可以在html页面,接收逻辑处理的self.render()方法传输的变量,将数据渲染到对应的地方 一.接收值渲染 {{...}}接收self.re ...
 - tornado下模板引擎的使用
		
模板引擎 Tornado中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者. Tornado =的模板支持“控制语句” ...
 - Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)
		
Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...
 - tornado之模板扩展
		
当我们有多个模板的时候,很多模板之间其实相似度很高.我们期望可以重用部分网页代码.这在tornado中可以通过extends语句来实现.为了扩展一个已经存在的模板,你只需要在新的模板文件的顶部放上一句 ...
 - Django框架04 /模板相关、别名/反向解析/路由分发
		
Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...
 
随机推荐
- python子进程模块subprocess详解与应用实例 之二
			
1.2. Popen 对象 Popen类的实例有下列方法: 1. Popen.poll() 检查子进程是否已经结束,设置并返回返回码值. 2. Popen.wait() 等待子进程结束,设置并返回返回 ...
 - 六.使用list和tuple
			
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: classmates = ...
 - 转-使用wifi调试程序
			
转自:http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 数据线丢了,不想花钱去买,在网上看了看,an ...
 - Mybatis和Hibernate比较
			
作者:乌拉拉链接:http://www.zhihu.com/question/21104468/answer/58579295来源:知乎著作权归作者所有,转载请联系作者获得授权. 1.开发对比开发速度 ...
 - Ubuntu下配置Apache的Worker模式
			
其实Apache本身的并发能力是足够强大的,但是Ubuntu默认安装的是Prefork模式下的Apache.所以导致很多人后面盲目的去 安装lighttpd或者nginx一类替代软件.但是这类软件有一 ...
 - javascript总结2: Date对象
			
1 Date 对象 Date 对象用于处理日期与时间. Date()的方法很多,这里只总结工作必备的方法! 2 常用方法 创建个 Date 对象:const mydate=new Date(); &l ...
 - ORACLE_ERP帐务分录
			
ORACLE MRPII各模块会计分录 第一章 采购模块 一.资产采购(科目来源:库存组织) 1.物料接收 借 材料采购 接收数量*采购单价 贷 应计暂估 接收数量*采购单价 ...
 - [转]xe6 android 使用距离传感器(Proximiry)
			
The first step it's a run sample from RAD Studio that named SensorInfo on your device. On the tab Bi ...
 - WPF中在摄像头视频上叠加控件的解决方案
			
一.视频呈现 前段时间,在一个wpf的项目中需要实时显示ip摄像头,对此的解决方案想必大家都应该知道很多.在winform中,我们可以将一个控件(一般用panel或者pictruebox)的句柄丢给摄 ...
 - 微信Token验证
			
/// <summary> /// 微信验证 /// </summary> /// <param name="echostr"></par ...