一、模板

#模板就是一个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. 相关度算法BM25

    BM25算法,通常用来作搜索相关性平分.一句话概况其主要思想:对Query进行语素解析,生成语素qi:然后,对于每个搜索结果D,计算每个语素qi与D的相关性得分,最后,将qi相对于D的相关性得分进行加 ...

  2. 744. Find Smallest Letter Greater Than Target 查找比目标字母大的最小字母

    [抄题]: Given a list of sorted characters letters containing only lowercase letters, and given a targe ...

  3. 383. Ransom Note 在字典数组中查找笔记数组

    [抄题]: Given an arbitrary ransom note string and another string containing letters from all the magaz ...

  4. linux下方便的录屏命令

    linux下方便的录屏命令   ffmpeg -f x11grab -s 1024*768 -r 20 -i :0.0 -sameq ~/recode.mpg -r后是刷新屏率,   推出直接Ctrl ...

  5. Solidity payable 方法表现

    pragma solidity ^; contract Person { string public name; uint age; uint private weight; string inter ...

  6. Linux Valgrind命令

    一.简介 C/C++程序,最常见的错误之一就是内存泄露.Valgrind 是一款 Linux下的内存调试工具,它可以对编译后的二进制程序进行内存使用监测找出内存泄漏问题. Valgrind通常包括如下 ...

  7. Luogu 3261 [JLOI2015]城池攻占

    BZOJ 4003 需要实现一个可并堆. 每个点维护一个小根堆,然后一开始把所有骑士加入到它所在的点的小根堆当中,实际上空间是$O(m)$的,然后我们从上到下不断合并这个小根堆,合并完之后如果遇到堆顶 ...

  8. Python基础 之 int、bool、str、列表、元组、字典

    数据类型 数据类型划分:可变数据类型     不可变数据类型 不可变数据类型:元组.bool.int (本身不可更改).str      (可哈希) 可变数据类型:列表list.字典dict   .集 ...

  9. dynamic和匿名类和var的混合使用 没提示照样点

    using System;using System.Collections;using System.Collections.Generic;using System.Linq;using Syste ...

  10. [docker]本地仓库的创建的使用

    如果自己创建的镜像可以供其他同事使用,那就可以大大节约开发时间成本,docker的本地仓库正好可以满足这样的需求 1.在仓库服务器上创建本地仓库 baylor@baylor-virtual-machi ...