web框架--tornado框架之模板引擎

使用Tornado实现一个简陋的任务表功能demo来讲解tornado框架模板引擎

一、demo目录结构

二、具体文件内容

2.1、commons.css

.body{
    margin: 0;
    background-color: bisque;
}

2.2、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <link rel="stylesheet" href="../static/commons.css"/>-->
    <link rel="stylesheet" href=‘{{static_url("commons.css")}}‘/>
</head>
<body>
    <h1>{{ag}}</h1>
    <h2>{{test_uimethod()}}</h2>
    <h3>{% module MyClass() %}</h3>
    <form method="post">
        <input type="text" name="name"/>
        <input type="submit" value="提交"/>

    </form>

    <h1>显示内容</h1>
    <ul>
        {% for item in contents %}
            <li>{{item}}</li>
        {% end %}
    </ul>
</body>
</html>

2.3、uimodule.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from tornado.web import UIModule

class MyClass(UIModule):
    def render(self, *args, **kwargs):
        return ‘UIModule‘

2.4、uimethod.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def test_uimethod(self):
    return ‘uimethod‘

2.5、index.py

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 import tornado.web
 4 import tornado.ioloop
 5 import uimethod as ut
 6 import uimodule as ud
 7
 8 class IndexHandle(tornado.web.RequestHandler):
 9     def get(self, *args, **kwargs):
10         self.render(‘index.html‘, contents=CONTENTS_LIST, ag="")
11
12     def post(self, *args, **kwargs):
13         CONTENTS_LIST.append(self.get_argument(‘name‘))
14         self.render(‘index.html‘, contents=CONTENTS_LIST, ag=‘this is ag‘)
15
16 if __name__ == ‘__main__‘:
17     CONTENTS_LIST = []  #为存放的是输入框输入的内容
18     #字典表示的是配置文件
19     settings = {
20         ‘template_path‘: ‘template‘,  #模板文件的存放位置
21         ‘static_path‘: ‘static‘,  #静态文件的存放位置
22         ‘static_url_prefix‘: ‘static/‘,  #静态文件前缀,减少每个文件引入都要加前缀的麻烦
23         ‘ui_methods‘: ut,
24         ‘ui_modules‘: ud,
25     }
26
27     application = tornado.web.Application([
28         (r‘/index‘, IndexHandle)
29     ], **settings)
30     application.listen(80) #设置服务端的监听端口
31     tornado.ioloop.IOLoop.instance().start() #阻塞服务端进程, 等待客户端的访问

2.6、demo运行的效果图

demo详解:

  • 模板引擎中的{{key}}表示取key对应的值, 当key为函数时候执行该函数并取该函数结果. 例如index.html文件中的<h1>{{ag}}</h1> 实际上取得是index.pyself.render("index.html", ag="this is ag", contents=CONTENTS_LIST)中的参数ag的值
  • <h1>{{test_uimethod()}}</h1> 这里执行的是自定义函数, 我们将这个自定义函数写在uimethod.py文件中, 并且在index.py文件中导入, 然后将index.py文件中的settings配置增加一行‘ui_methods‘: ut, 该行内容表示模板引擎可执行自定义函数
  • 模板引擎中的{%%}可用于循环语句和条件语言以及自定义类的执行, {% for item in contents %}此处正是用于循环遍历contents中的内容
  • <h1>{%module MyClass()%}</h1>此处表示模板引擎执行自定义类, 该类的文件对应的是uimodule.py文件, 我们需要在index.pysettings中增加一行‘ui_modules‘: ud, 改行表示模板引擎可使用自定义类
  • 注意, 我们将index.html文件引入css的方式改为了<link rel="stylesheet" href=‘{{static_url("commons.css")}}‘>, static_url()是模板引擎内置的自定义函数, 用该函数引入css文件时候, 仅当css文件内容发生变化时候, 浏览器才会重新缓存该css文件

原文地址:https://www.cnblogs.com/june-L/p/11992686.html

时间: 2024-10-07 19:13:04

web框架--tornado框架之模板引擎的相关文章

Tornado框架配置使用Jinja2模板引擎

安装jinja2包 pip install jinja2 定义继承tornado.web.RequestHandler的子类BaseHandler.如果请求处理类继承这个类将会使用jinja模板引擎:如果请求处理类继承tornado.web.RequestHandler,则会使用Tornado框架的模板引擎. 1 import os 2 3 from jinja2 import Environment, FileSystemLoader, TemplateNotFound 4 from torn

laravel框架总结(二) -- blade模板引擎

## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> //输出结果是 larave5 larave5 ##情形2 $name = laravel5 并且使用@的情形 <div class="title"> {{$name}} @{{$name}}</div> //输出结果是 larave5{{$name}} ##情形

web框架--tornado框架之模板引擎继承

使用模板的继承可以重复使用相同结构的模板, 可以大大减少代码量 入门实例 一.demo目录结构 注解: master.html为模板内容,被index.html,account.html引用 二.各文件代码 2.1.master.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Maste

web框架--tornado框架之初识

一.初识tornado 对于Web框架来说,一般分为两类,其中一类则是包含上述 4部分 内容的框架,另外一类就是只包含 第3部分 功能的框架.tornado就是一中属于前者的框架.tornado 是一个基于 Python 开发的web框架,较其他 Web 框架的区别是:采用了非阻塞的方式和对epoll的应用.这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架. 经典的hello world 案例:tornado内部已经帮我们实现socket. 1 #!/usr/bin

Laravel 模板引擎Blade中标签详细介绍

这篇文章主要介绍了Laravel模板引擎Blade中section的一些标签的区别介绍,需要的朋友可以来看看. Laravel 框架中的Blade模板引擎很好用,但是官方文档介绍的并不详细,我接下来将详细的介绍下: @yield与@section 首先,@yield是不可拓展的,如果你要定义的部分没有默认内容让子模版扩展,那么用@yield($name,$default)的形式会比较方便,如果你在子模版中并没有指定这个区块的内容,它就会显示默认内容,如果定义了,就会显示你定义的内容. 与之比较,

Laravel模板引擎Blade中section的一些标签的区别介绍

Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚.比如,使用中可能会遇到这样的问题: [email protected] 和 @section 都可以预定义可替代的区块,这两者有什么区别呢?[email protected] 可以用 @show, @stop, @overwrite 以及 @append 来结束,这三者又有什么区别呢? 本文试对这些问题做一个比较浅显但是直观的介绍. @yield 与

Javascript库,前端框架(UI框架),模板引擎

JavaScript库:JQuery,undoscore,Zepto 纯Javascript语言封装, 前端框架(UI框架):Bootstrap,Foundation,Semantic UI,Pure.css 前端框架.UI框架,或者叫UI模板 HTML + CSS + (JavaScript)? 模板引擎: 叫HTML模板引擎?  模板文件(HTML)+(CSS)?+数据(JSON) =输入=> 模板引擎  =输出=>HTML (客户端)前端模板引擎(渲染),(服务器)后端模板引擎(渲染)

模板引擎和框架

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面给出的定义.

《开源框架那点事儿25》:对框架模板引擎实现方式的改造实录

点滴悟透设计思想,Tiny模板引擎优化实录! 增加框架设计兴趣小组:http://bbs.tinygroup.org/group-113-1.html Tiny模板引擎的实现方式原来是採用的编译方式,近期发生了一些问题.因此我认为有必要把编译方式调整为解释方式,为此就開始了此次实现活动. 编译方式存在的问题 当时採用编译方式.主要是考虑到编译方式在执行时不必再去遍历语法树.因此就採用了编译方式. 可是在实际应用其中,出现了例如以下问题: 文件路径冲突的问题 因为採用的是编译方式,这个时候就存在在