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. ...
随机推荐
- SpringMVC总结四:拦截器简单介绍
首先要说一下HandlerExecutionChain: HandlerExecutionChain是一个执行链,当用户的请求到达DispatcherServlet的时候,DispatcherServ ...
- 中国大学MOOC 设置AutoCAD的绘图环境
- while 循环和do while循环
while循环是先检测条件符合不符合,符合才执行循环体内容,不符合就跳过while循环. 就和一个房间有两个门,一个前门,一个后门,while循环是当你进入前门的时候有人会检查你的身份,只有身份符合条 ...
- 25.AVG 函数
定义和用法 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. SQL AVG() 语法 SELECT AVG(column_name) FROM table_name SQL AVG() ...
- 7.内网渗透之windows认证机制
文章参考自三好学生域渗透系列文章 看了内网渗透第五篇文章,发现如果想要真正了解PTT,PTH攻击流程,还需要了解windows的认证机制,包括域内的kerberos协议. windows认证机制 在域 ...
- C高级第一次作业
未来两周学习内容 复习指针的定义和引用 指针的应用场景: 指针作为函数参数(角色互换) 指针作为函数的参数返回多个值 指针.数组和地址间的关系 使用指针进行数组操作 数组名(指针)作为函数参数(冒泡排 ...
- 黑盒测试实践--Day1 11.25
黑盒测试实践--Day1 今天完成任务情况: 晚上得到老师布置的本周小组作业--黑盒测试的基本要求,然后小组在上周作业建立的微信群里开了个在线的短会,主要内容如下: 组长小靳带领大家学习了这个要求 计 ...
- YDNJS(上卷):this 的绑定对象
函数中的 this 是在调用时被绑定的,this 指向谁完全取决于函数的调用位置. 确定 this 的绑定对象的方式有 4 种. 默认绑定 默认绑定就是将函数中的 this 绑定给了全局对象 wind ...
- C++中的Trivial 、POD、non-POD和Standard Layout概念
POD types non-POD types Standard Layout types A Formal Definition Informally, a standard layout clas ...
- 编写高质量代码改善C#程序的157个建议——建议17:多数情况下使用foreach进行循环遍历
建议17:多数情况下使用foreach进行循环遍历 由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历.假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方 ...