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. ...
随机推荐
- elasticsearch2.x线程池配置
一个Elasticsearch节点会有多个线程池,但重要的是下面四个: 索引(index):主要是索引数据和删除数据操作(默认是cached类型) 搜索(search):主要是获取,统计和搜索操作(默 ...
- libevent源码分析
这两天没事,看了一下Memcached和libevent的源码,做个小总结. 1.入门 1.1.概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络 ...
- c++ 适配器模式(adapter)
当两个系统的接口不一样时,我们就要重新封装一下接口,以便于当前系统的调用.这种模式叫做适配器模式.适配器模式分为两种: 1.对象组合适配器(Object Adapter) 2.类适配器(Class A ...
- 如何安全退出已调用多个Activity的应用
对于单一Activity的应用来说,退出很简单,直接finish()即可.当然,也可以用killProcess()和System.exit()这样的方法. 但是,对于多Activity的应用来说,在打 ...
- 屌爆的xamarin,一人单挑google/apple/windows
一个IDE就把3大手机平台全包了: android:自带模拟器xamarin player,速度堪比genymotion. ios:需要一台mac机辅助,一旦配好后可全程脱离,连ios模拟器都给镜像到 ...
- WEB前端--JavaScript
JavaScript JavaScript基础 一.JavaScript简介 JavaScript是一种嵌入到HTML文件中的描述性语言,由浏览器的解释器将其动态地处理成可执行的代码,能独立地完成与客 ...
- HTTP文件上传插件开发文档-ASP
版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/http-u ...
- 编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质
建议39:了解委托的实质 理解C#中的委托需要把握两个要点: 1)委托是方法指针. 2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数. 设想这样一个场景:在点对点文件传输过 ...
- POJ1062 昂贵的聘礼(带限制的spfa)
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- mysql 游标CURSOR
FETCH cursor_works INTO num,provinceIDs,cityIDs,SourceID; 定义的变量值必须与 游标中的字段不同,一一对应 DECLARE cursor_wor ...