01 模板继承

父模板

<html lang="en">

<head>
    <meta charset="UTF-8">​

<link rel="shortcut icon" href="{{ static_url('images/favicon.ico')}}"> </head>

<body>

{% block body %}

this is tornado

{% end %}

</body>

</html>

子模板

{% extends ./03base.html %}

{% block title %}Extend{% end %}

{% block body %}

{% if username!='no' %}

欢迎用户 {{ username }} 登录

{% else %}

您还没有登录

{% end %}

{% end %}

extend

{% extend filename %}继承模板,在子模板中会把父模板的所有内容都继承到子模板中,减少大量重复代码

block

{% block name %}...{% end %}

被词语句包裹的代码块在子模板中可以被重写,覆盖父模板中的

模板导入

模板文件

this is tornado templates include 子模板

{% include ./05include.html %}

include

{% include filename%}

include 可以导入一些其他的模板文件,一般使用 include 的时候,模板文件中不使用 block 块

继承

extend 可以继承父模板,从而节省了大量重复代码,同时也为修改带来了极大的方便,但是需要注意的是一定只能单继承,一个模板只能继承一个模板

block 包裹一部分代码块,可以在子模板中重写块中的内容

导入模板文件

include 可以导入模板文件,但是导入的模板中不要再出现 extend 和 block

02 函数和类导入

渲染时导入

在 Handler 中渲染模板时传入

将函数写在handler里面.

示例

def haha(self):

return 'this is hahaha'

class Calculation:

def sum(self, a, b):

return a+b

传入

self.render('04extend.html',

haha=self.haha,

cal=Calculation

)

{{ haha() }}

{{ Calculation().sum(5.5.) }}

模板中直接导入

在模板中也可以直接导入 python 模块

导入内置模块

{% import time %}

{{ time.ctime() }}

导入自定义模块

{% from mod_file import add, upper, Calculation %} {{ add(5, 6)}}

注意路径问题:python解释器查找 mod_file 时是根据 py 文件的路径来查找的,不是根据模板的路径来查找

03 ui_methods ui_modules

第一步

新建文件ui_methods.py

新建文件ui_methods.py ,这里的文件名是随意的只要在import时合法即可,这里可以新建一个文件夹,如util,来放置 ui_methods.py 和 ui_modules.py

def methods1(self): #注意这里要加上self

  return 'ui_methods 1'

def methods2(self):

  return 'ui_methods 2'

新建文件ui_modules.py

新建文件ui_modules.py,使用ui_modules需要继承UIModule类

from tornado.web import UIModule

class UiModule(UIModule):

def render(self, *args, **kwargs):

return '我是 ui_module'

第二步

在项目主文件中导入

import util.ui_modules

import util.ui_methods

导入类要加module:

{{ module TestModule }}

导入方法加methods:

{{ methods func() }}

第三步

配置 Application 参数

ui_methods=util.ui_methods,

ui_modules=util.ui_modules,

也可以写成字典形式:

ui_modules={

'UiModule':util.ui_modules.UiModule,

}

第四步

在模板中调用

{% module UiModule() %}

{{ methods1() }}

刚才的这种方式,虽然烦琐了一点,但是在调用的时候十分简单,在越是有很多模板需要导入同一个对象的时候,就越显得其方便简洁,接下来演示个具体的案例

添加 ui_module

在 ui_modules 中添加如下代码

class Advertisement(UIModule):

def render(self, *args, **kwargs):

return self.render_string('06ad.html')

def css_files(self):

return "/static/css/King_Chance_Layer7.css"

def javascript_files(self):

return [

"/static/js/jquery_1_7.js",

"/static/js/King_Chance_Layer.js",

"/static/js/King_layer_test.js",

]

导入静态文件

导入给大家准备好的静态文件

模板中使用

{% module Advertisement() %}

04 模板其他命令

apply

{% apply upper %}

hello world     hahaha

{% end %}

{{ upper('hahaha') }}

使用apply语句,使用函数的作用范围到最近的{%end%}为止

linkify

{%raw linkify('百度: http://www.baidu.com') %} linkify生成一个链接,但是要注意模板转义

tornado框架基础05-模板继承、UImodul和UImethods的更多相关文章

  1. tornado框架基础10-websocket

    websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...

  2. 在laravel框架中使用模板继承来进行更方便的布局

    html中有很多东西是重复的,这是需要用到laravel的模板继承,来完成这样的简化操作. 父模板 既然时模板继承,那么就首先有一个父模板,父模板类似网页html中的头部和尾部,但又有一些不一样. / ...

  3. tornado框架基础09-cookie和session

    01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...

  4. tornado框架基础01-路由简介

    tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...

  5. Tornado框架中视图模板Template的使用

    上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler): def get(self): self.write(''' <htm ...

  6. tornado框架基础11-tornado异步

    01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...

  7. tornado框架基础08-sqlalchemy表关系和简单登录注册

    01 一对一表关系 Module 需要先创建对应的 Module ,这里采用之前建立好的 User 和 UserDetails relationship from sqlalchemy.orm imp ...

  8. tornado框架基础06-SQLAlchemy连接数据库

    01 ORM 在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢? 和数据库相关,不同的数据库需要 ...

  9. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

随机推荐

  1. intelliJ IDEA运行结果不更新

    无论代码怎么改,运行结果就是不更新的话,可以试一下build(这么简单的一句话,就困扰了好久,还以为自己代码有错)

  2. PostgreSQL - 修改默认端口号

    升级PostgreSQL遇到的问题 之前将PostgreSQL从9.5升级到了10.3版本,安装时将端口设置成了5433,(默认是5432),后来发现在使用psql来restore db会发生语法错误 ...

  3. Spring + MyBaits java.lang.reflect.InvocationTargetException 启动日志报错

    调试发现 实例化 class org.apache.ibatis.logging.slf4j.Slf4jImpl时发生异常,所以 slf4j jar 问题解决: http://www.cnblogs. ...

  4. c++,类的对象作为形参时一定会调用复制构造函数吗?

    c++,类的对象作为形参时一定会调用复制构造函数吗? 答:如果参数是引用传递,则不会调用任何构造函数:如果是按值传递,则调用复制构造函数,按参数的值构造一个临时对象,这个临时对象仅仅在函数执行是存在, ...

  5. nginx缓存过期

    1 原理 在默认下,请求过的内容会接受304,而从本地缓存调用.这是通过client向server发送请求,给出ETag,server确认ETag未变,则不返回内容,client调用本地缓存. 而ex ...

  6. LSP

    Liskov Substitution Principle里氏替换原则,OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为 ...

  7. c#内存管理,垃圾回收和资源释放

    <1>关于虚拟内存的概念 Windows使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上去,这些任务完全由windows后台管理,其实际结果是32位处理机上的每 ...

  8. os模块详解2

    1.os.getenv('HOME')  读取操作系统环境变量HOME的值. 2.os.environ 返回操作系统所有的环境变量. 3.os.environ.setdefault(‘a’,‘b’) ...

  9. ArcGIS Desktop新建postgresql版sde(10.4.1)的连接

    假设连接到的sde数据库是pg数据库,其他参数包括: ip:10.0.0.8 数据库:sde1 用户:sde 密码:sde 打开catalog,新建数据库连接 按如下输入数据库连接参数 红框1是数据库 ...

  10. 学习Python的一些Tips

    0. Python安装 官网提供多种方式,一般Windows下直接安装exe即可:Linux下基本上自带python:另外也提供源码,也可自行编译: 若安装后无法使用,则检查一下环境变量是否设置正确. ...