tornado框架基础05-模板继承、UImodul和UImethods
01 模板继承
父模板
<html lang="en">
<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的更多相关文章
- tornado框架基础10-websocket
websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...
- 在laravel框架中使用模板继承来进行更方便的布局
html中有很多东西是重复的,这是需要用到laravel的模板继承,来完成这样的简化操作. 父模板 既然时模板继承,那么就首先有一个父模板,父模板类似网页html中的头部和尾部,但又有一些不一样. / ...
- tornado框架基础09-cookie和session
01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...
- tornado框架基础01-路由简介
tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...
- Tornado框架中视图模板Template的使用
上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler): def get(self): self.write(''' <htm ...
- tornado框架基础11-tornado异步
01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...
- tornado框架基础08-sqlalchemy表关系和简单登录注册
01 一对一表关系 Module 需要先创建对应的 Module ,这里采用之前建立好的 User 和 UserDetails relationship from sqlalchemy.orm imp ...
- tornado框架基础06-SQLAlchemy连接数据库
01 ORM 在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢? 和数据库相关,不同的数据库需要 ...
- tornado框架基础04-模板基础
01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...
随机推荐
- jQuery笔记之工具方法—高级方法Ajax
$.ajxa() ——基本使用 前提:先了解js的执行机制 $.Callbacks()——回调 $.Deferred()——异步 $.when() 网络服务器链接由<渡一教育>提供 --- ...
- python三行代码实现快速排序
def quick_sort(array): if len(array) < 2: return array return quick_sort([lt for lt in array[1:] ...
- LightOj 1088 - Points in Segments (二分枚举)
题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1088 题目描述: 给出一个n位数升序排列的数列,然后q个查询,每个查询问指定 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Linux下mysql新建账号及权限设置各种方式总结
来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...
- 生产环境中使用脚本实现tomcat start|status|stop|restart
一.在实际生产环境中tomcat启动是在bin目录下采用自带脚本startup.sh启动:使用shutdown.sh关闭.如下图: 再如果对于新手来讲在不知道路径情况下重启是一件头痛的事情(注意没有r ...
- AJPFX关于多线程概述及应用
一.认识多任务.多进程.单线程.多线程要认识多线程就要从操作系统的原理说起. 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情.比如你在copy东西的时候 ...
- AJPFX关于java中可访问控制符和非访问控制符的详细总结
1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 pub ...
- IO(下)
7. 标准输入.输出流 7.1 标准输入流 源数据源是标准输入设备(键盘.鼠标.触摸屏)等输入设备.在java中用http://System.in 得到一个 InputStream 字节输入流. 需求 ...
- os模块详解2
1.os.getenv('HOME') 读取操作系统环境变量HOME的值. 2.os.environ 返回操作系统所有的环境变量. 3.os.environ.setdefault(‘a’,‘b’) ...