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-模板的更多相关文章

  1. tornada模板学习笔记

    import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os. ...

  2. tornado之表单和模板

    之前在indexHandler中通过self.write()方法在对应的网页中写入具体的字符信息. 如果我们想直接返回一个网页那么这个时候就需要用到模板了 首先在工程目录下新建一个template文件 ...

  3. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  4. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  5. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  8. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  9. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  10. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

随机推荐

  1. 前端Ajax跨域解决方案

    业务场景: 前后端分离需要对接数据接口. 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应 ...

  2. Ironic 裸金属管理服务的网络模型

    目录 文章目录 目录 Bare-Metal networking in Neutron 核心网络类型 网络拓扑 抽象网络拓扑图 Neutron Implementation Neutron 了解裸金属 ...

  3. OpenStack 虚拟机启动流程 UML 分析(内含 UML 源码)

    目录 文章目录 目录 前言 API 请求 Nova API 阶段 Nova Conductor 阶段 Nova Scheduler 阶段 Nova Compute 阶段(计算节点资源分配部分) Nov ...

  4. 谷歌云服务器XShell登录

    一,谷歌云服务器,默认用浏览器进行SSH链接,而且也不告知密码.以Centos为例,先使用浏览器连接 1,给root修改密码 sudo passwd root 2,编辑ssh配置文件 sudo nan ...

  5. 使用MJRefresh自定义下拉刷新,上拉加载动画

    有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...

  6. 【JVM学习笔记】类加载过程

    在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的:提供了更大的灵活性,增加了更多的可能性 JVM启动过程包括:加载.连接.初始化 加载:就是将class文件加载到内存.详细的说是 ...

  7. div与焦点事件

    div正常情况下是无法获得焦点的,所以其blur方法和focus方法都是没有用的,解决方案如下: <div tabindex="0"></div> 添加ta ...

  8. spark基础概念(一):幂等性。

    1) 出处:幂等性源自数学概念,表示f(x) = f(f(x)); 含义:多次执行一个函数得到的值和执行一次得到的值相同. 如:f(x) = pow(x, 1);  f(x) = abs(x); 2) ...

  9. PHP $_SERVER超全局变量

    $_SERVER是php中的超全局变量,一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建. ...

  10. selenium+java+eclipse web项目自动化测试环境搭建

    一.java的安装与环境配置 1.下载JDK(Java Development Kit),下载地址 www.oracle.com 2.安装jdk(傻瓜式安装) 3.安装完成后,配置环境变量,步骤: ( ...