文档章节

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

inevermore
 inevermore
发布于 2015/03/19 00:44
字数 296
阅读 3
收藏 0

上文的程序中有这样一段:

class MessageHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('''
<html>
<head>
        <title>Please Input Message</title>
</head>
<body>
        <form action="/message" method="post">
                <input type="text" name="message"><br>
                <input type="submit" value="submit">
        </form>
</body>
</html>''' 
        )
    def post(self):
        #self.set_header("Content-Type", "text/plain")
        self.write("You wrote <h1>" + self.get_argument("message") + "</h1>")

当收到GET请求时,返回一段HTML表单。

上面的这种写法,将html写在python代码中,灵活性差,而且view代码与controller代码混合在一块,不符合MVC的原则。

所以我们采用Tornado中的模板。

新建form.html:

<html>
    <head>
    <title>{{title}}</title>
    </head>
    <body>
        <form action="/message" method="post">
            <input type="text" name="message" value="please input.">
            <input type="submit" value="submit">
        </form>
    </body>
</html>

然后将上面的python代码修改为:

 

class MessageHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("form.html", title="Input Message")
    def post(self):
        #self.set_header("Content-Type", "text/plain")
        self.write("You wrote <h1>" + self.get_argument("message") + "</h1>")

这样代码简洁了很多。

 

完整的代码是:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("<h1>This is Home Page!</h1>")

class StoryHandler(tornado.web.RequestHandler):
    def get(self, story_id):
        self.write("You request the story <h1>" + story_id + "</h1>")

class MessageHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("form.html", title="Input Message")
    def post(self):
        #self.set_header("Content-Type", "text/plain")
        self.write("You wrote <h1>" + self.get_argument("message") + "</h1>")

application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/story/([0-9]+)", StoryHandler),
    (r"/message", MessageHandler),
    ])

if __name__ == '__main__':
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

© 著作权归作者所有

inevermore
粉丝 2
博文 79
码字总数 53968
作品 0
深圳
私信 提问
python学习日记五(简单搭建Django框架)

一.Django框架简介 官网 :https://docs.djangoproject.com/en/1.11/ Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型...

HaleyLiu
2018/01/01
0
0
翻译:introduce to tornado - form and template

在上一章节中,我们看到了如何使用tornado去创建和配置一个简单的web应用。我们学习了:handlers、http方法和tornado的整体框架结构。在这个章节,我们将要开始学习如何在web应用中使用更多更...

f1eming
2013/03/13
825
0
扩充Tornado模板,使之带上类似ASP.NET的Code Behind功能

Tornado框架的模板功能非常实用,但是render的变量需要在RequestHandler中额外手工指定,造成整个工程结构混乱,不利于多人合作开发。如果模板能够按照某种规则,自动加载某一个py源文件中的...

mallon
2012/07/08
585
0
Tornado Web 开发 框架搭建 (2)

模板设置 由于tornado自带自己的模板,要把jinja2引入tornado需要做一些特殊处理 在这里,新建jinja.py 参考https://github.com/mxyzm/snail/blob/master/joiners/jinja.py #coding=utf-8""......

冰星零
2013/09/23
3.2K
0
Python模板库Mako的用法

Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django、Jinja2等等。 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from mako.template impor...

北方攻城师
2014/07/14
3.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
6分钟前
3
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
9分钟前
5
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
11分钟前
2
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
11分钟前
26
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部