一、模板

#模板就是一个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 模板的更多相关文章

  1. 学习tornado:模板

    第一次接触tornado的template,是在做oastub的时候,因为一位同学在handler里面硬编码了html代码,我决定引入template机制来降低逻辑与页面的耦合. 简介 tornado ...

  2. Hyper-v UBUNTU 12.04 模板设置

    Ubuntu 12.04 模板设置 参考文档 Hyper-v安装ubuntu http://blogs.msdn.com/b/virtual_pc_guy/archive/2012/05/02/ubu ...

  3. Tornado之模板

    知识点 静态文件配置 static_path StaticFileHandler 模板使用 变量与表达式 控制语句 函数 块 4.1 静态文件 现在有一个预先写好的静态页面文件 (下载静态文件资源), ...

  4. 第二百六十一节,Tornado框架模板引擎本质

    Tornado框架模板引擎本质 只需要了解一下即可 本篇就来详细的剖析模板处理的整个过程. 上图是返回给用户一个html文件的整个流程,较之前的Demo多了绿色流线的步骤,其实就是把[self.wri ...

  5. 第二百五十九节,Tornado框架-模板语言的三种方式

    Tornado框架-模板语言的三种方式 模板语言就是可以在html页面,接收逻辑处理的self.render()方法传输的变量,将数据渲染到对应的地方 一.接收值渲染 {{...}}接收self.re ...

  6. tornado下模板引擎的使用

    模板引擎 Tornado中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者. Tornado =的模板支持“控制语句” ...

  7. Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)

    Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...

  8. tornado之模板扩展

    当我们有多个模板的时候,很多模板之间其实相似度很高.我们期望可以重用部分网页代码.这在tornado中可以通过extends语句来实现.为了扩展一个已经存在的模板,你只需要在新的模板文件的顶部放上一句 ...

  9. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

随机推荐

  1. 并发之AbstractQueuedLongSynchronize----AQS

    一概述 谈论到并发,不得不谈论锁,而谈论到锁而言,又离不开ReentrantLock.ReentrantLock是锁锁的一种实现方式,对于锁而言,我们这里就需要讨论到AQS,即上面的AbstractQ ...

  2. ZOJ 3956 Course Selection System

    题意 有n节课可供选择,每节课都有两个值Hi和Ci,如果学生选择了m节课(x1,x2,....,xm),则它的舒适值被定义为: //这里没有公式((lll¬ω¬)),因为那个图片我保存不下来≧ ﹏ ≦ ...

  3. 制作第三方SDK静态库、.framework(修正)

    静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和 .framework 静态库和动态库的使用区别: 静态库:链接时,静态库会被完整地复制 到 可执行文件中 ...

  4. webservice CXF 相关面试题

    Web Service的优点(1) 可以让异构的程序相互访问(跨平台)(2) 松耦合(3) 基于标准协议(通用语言,允许其他程序访问) 1:WEB SERVICE名词解释.JSWDL开发包的介绍.JA ...

  5. Linux 下五款出色的流媒体客户端

    数 字流媒体这几天几乎占据了我音乐收听的全部时间.近年来我为了收藏 CD 花费了数量可观的费用:但它们中的大部分现在正静静地躺在满是灰尘的角落里.基本上所有的音乐流媒体服务所提供的的音质都不如 CD ...

  6. EXE DLL等可执行程序添加版本号版权等信息

    在使用Microsoft Visual Studio开发工具等编写的exe或者dll等可执行文件时,我们往往需要对这些可执行文件添加版本号,公司,版权等信息. 1. 在我们需要添加各种信息的项目工程中 ...

  7. JS获得css样式即获得元素的计算样式(《Javascript精粹修订版》书摘)

    为HTML文档中的元素指定样式可以有3种方法:使用内嵌样式.在页面的head中对Style进行声明以及外部 CSS 文件.元素的视觉效果往往是由上述3种方式的结合或者其中某一种方式来确定的,但是内嵌样 ...

  8. php手机号正则

    preg_match("/^1[34578]{1}\d{9}$/", $phone)

  9. nmap 笔记

    本文由阿德马翻译自国外网站,请尊重劳动成果,转载请注明出处,谢谢 1.初级用法: 教程   Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反 ...

  10. Python基础入门-字符串

    字符串详解 字符串的用法是最多的,很多功能的实现都离不开字符串,而且字符串的使用方法也很多,这里面不能说全部给大家一一介绍,只能说把一些常用的列举出来,方便回忆或者说供大家参考,谢谢!请继续往下看~~ ...