tornada-模板
tornado模板
1.配置模板路径 (project/config.py)
# coding=utf-8
import os
BASE_DIRS = os.path.dirname(__file__)
# 参数
options = {
“post” : 8000,
}
# 配置
settings = {
"static_path" : os.path.join(BASE_DIRS,"static"),
"template_path":os.path.join(BASE_DIRS,"templates"),
"debug":True,
}
2.配置URL路由(project/application.py)
# coding = utf-8
import tornado.web
from views import views
import config class Application(tornado.web.Application):
def __init__(self):
app = [
(r"/home",views.HomeHandler),
]
super(Application, self).__init__(app, **config.settings)
3.渲染并返回给客户端(project/views/views.py)
# coding = utf-8
# 视图 from tornado.web import RequestHandler class HomeHandler(RequestHandler):
def get(self, *args, **kwargs):
temp = 100
per = {"name" : "hello", "age":18}
self.render("home.html", num = temp, per = per)
# 方法2
self.render("home.html", num = temp, **per)
4.变量与表达式(project/templates/home.html)
- 语法
- {{ var }}
- {{ expression }}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>这里是home页面</h1>
<h1>num: {{ num }}</h1>
<h1>per["name"]</h1>
<h1>{{name}}</h1>
</body>
</html>
5.流程控制
- if
- {% if 表达式 %} ......{% elif 表达式 %} ......{% else %}..... {%end%}
- for
- {% for item in items %} ...... {%end%}
- while
6.函数
- static_url
- <link rel="stylesheet" href="{{ static_url('css/home.css') }}">
- 优点1: 修改目录不需要修改URL
- 优点2:创建了一个基于文件内容的hash值,并将其添加到URL末尾(当一个查询参数),这个hash值总能保证加载的是最新的文件,而不是以前的缓存版本。无论是开发阶段还是上线阶段都是很有必要的。
- 自定义函数
# 把函数当参数传递
class FuncHandler(RequestHandler):
def get(self, *args, **kwargs):
def mySum(n1,n2):
return n1+n2
self.render(‘home.html’,mysum = mySum) # 在 home.html 中使用
<h1>{{ mysum(100,99) }}</h1>
7.转义
- 作用
- tornado默认开启了自动转义功能,能防止网址受到恶意攻击
我们可以通过raw语句来输出不被转义的原始格式,如:
{% raw text %}
注意: 只能关闭一行;在Firefox浏览器中会直接弹出alert窗口,而在Chrome浏览器中,需要set_header("X-XSS-Protection", 0)
若要关闭自动转义:
一种方法是在Application构造函数中传递autoescape=None
另一种方法是在每页模板中修改自动转义行为,添加如下语句:
{% autoescape None %}
escape()
关闭自动转义后,可以使用escape()函数来对特定变量进行转义,如:
{{ escape(text) }}
8.块
我们可以使用块来复用模板,块语法如下:
{% block block_name %} {% end %}
而子模板index.html使用extends来使用父模板base.html,如下:
{% extends "base.html" %}
9.静态文件
- static_path
- "static_path":os.path.join(BASE_DIRS, "static")
- StaticFileHandler (静态文件)
- 注意:放在所有的路由下面(在application.py中)
(r"/(.*)$", tornado.web.StaticFileHandler,{“path”:os.path.join(config.BASE_DIRS,"static/html"),"default_filename":"index.html"})
tornada-模板的更多相关文章
- tornada模板学习笔记
import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os. ...
- tornado之表单和模板
之前在indexHandler中通过self.write()方法在对应的网页中写入具体的字符信息. 如果我们想直接返回一个网页那么这个时候就需要用到模板了 首先在工程目录下新建一个template文件 ...
- Jade模板引擎让你飞
写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- JavaFx入门(一)
JavaFx和Swing的对比: javaFX确实比swing好看些,但没有swing的事件按钮等写法爽快,特别是使用eclipse的matisse开发视图,托拉拽的方式.可javaFX不只是有swi ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
笔记 3.分布式系统CAP原理常见面试题和注册中心选择 简介:讲解CAP原则在面试中回答和注册中心选择 C A 满足的情况下,P不能满足的原因: 数据同步(C) ...
- 反爬虫2(代理ip)
在进行爬虫访问时,被访问主机除了会校验访问身份,还会校验访问者的ip, 当短时间同ip大量访问时,主机有可能会拒绝 返回,所以就现需要代理ip, 百度中可以获取到大量的免费的代理ip(ps:注意在访问 ...
- NOIp2018D1T1 积木大赛 【思维】
题目传送门 感觉不是很难,但是需要一些思考... 可以发现,贪心地向尽量大的区间添加,但是存在一些比较小的数,它们不需要再加了,就会从那个地方断成两个区间.所以刚开始想到的做法就是统计每一种数的数量, ...
- 【机器学习】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- 【DSP开发】解读TI的KeyStone II云技术应用
最近,德州仪器(TI)公司推出6款最新KeyStone II多核SoC,助力云应用.TI公司多核DSP中国市场开发经理蒋亚坚先生向媒体讲解了这6款KeyStone II新产品的特点与目标应用. ...
- Visual Basic 中读取逗号分隔的文本文件
TextFieldParser 对象提供一种可以轻松而高效地分析结构化文本文件(如日志)的方法. TextFieldType 属性用于定义文件是带分隔符的文件还是具有固定宽度文本字段的文件. Dim ...
- 小记--------spark内核架构原理分析
首先会将jar包上传到机器(服务器上) 1.在这台机器上会产生一个Application(也就是自己的spark程序) 2.然后通过spark-submit(shell) 提交程序 ...
- <<C++ Primer>> 第 6 章 函数
术语表 第 6 章 函数 二义性调用(ambiguous call): 是一种编译时发生的错误,造成二义性调用的原因时在函数匹配时两个或多个函数提供的匹配一样好,编译器找不到唯一的最佳匹配. 实 ...
- python基础_面向对象
面向对象定义 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance) ...