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. easy dragging script

    下面的ahk脚本提供了windows下alt dragging的能力: ; Easy Window Dragging -- KDE style (requires XP/2k/NT) -- by Jo ...

  2. MySQL乱码的原因和设置UTF8数据格式

    https://segmentfault.com/a/1190000018662023 MySQL使用时,有一件很痛苦的事情肯定是结果乱码.将编码格式都设置为UTF8可以解决这个问题,我们今天来说下为 ...

  3. Golang 单例模式 singleton pattern

    在Java中,单例模式的实现主要依靠类中的静态字段.在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能.来看下下面的例子: package singleton         ...

  4. numpy的divide函数

    和直接用/一样,都是矩阵的对应元素相除. 如果用*,那么是矩阵的对应元素相乘. 如果要实现矩阵乘法,用numpy的dot函数.

  5. logistics多分类

    multiclassification #DATASET: https://archive.ics.uci.edu/ml/datasets/Glass+Identificationimport num ...

  6. C学习笔记-指针

    指针的概念 指针也是一个变量,指针变量的值是另一个变量的地址 换句话说就是,指针存放的是一个内存地址,该地址指向另一块内存空间 指针变量的定义 指向一个变量的变量 int *p = NULL; p = ...

  7. Nginx的root和alias区别

    1.root 下面举例说明: location /i/ { root /data/w3; } 请求 http://foofish.net/i/top.gif 这个地址时,那么在服务器里面对应的真正的资 ...

  8. 好用的 Chrome 插件

    这些好用的 Chrome 插件,提升你的工作效率   本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可 ...

  9. HTML笔记(三) 表格和列表

    本篇记录表格 (table) 和有序列表 (ordered list) \ 无序列表 (unordered list) 的部分用法 1.表格table 表格标签 使用 <table> 定义 ...

  10. java_实现一个类只能声明一个对象

    public class StaticDemo { public int a=10; private static StaticDemo s= new StaticDemo(); private St ...