为Python的Tornado框架配置使用Jinja2模板引擎的方法


Posted in Python onJune 30, 2016

tornado 默认有一个模板引擎但是功能简单(其实我能用到的都差不多)使用起来颇为麻烦, 而jinja2语法与django模板相似所以决定使用他.

下载jinja2

还是用pip 下载(用的真是爽)

pip install jinja2

这样就可以使用了.

tornado与jinja2 整合

tornado和jinja2整合起来很简单(其实是网上找的比较简单), 不知道从那里找到的反正找到了,不说了直接上代码

#coding:utf-8

import tornado.web
from jinja2 import Environment, FileSystemLoader, TemplateNotFound

class TemplateRendring(object):
  """
  A simple class to hold methods for rendering templates.
  """
  def render_template(self, template_name, **kwargs):
    template_dirs = []
    if self.settings.get('template_path', ''):
      template_dirs.append(self.settings['template_path'])
    env = Environment(loader=FileSystemLoader(template_dirs))

    try:
      template = env.get_template(template_name)
    except TemplateNotFound:
      raise TemplateNotFound(template_name)
    content = template.render(kwargs)
    return content 

# 就是重新写 BaseHandler 由jinja2模板渲染
class BaseHandler(tornado.web.RequestHandler, TemplateRendering):
  """
  Tornado RequestHandler subclass.
  """
  def initialize(self):
    pass

  def get_current_user(self):
    user = self.get_secure_cookie('user')
    return user if user else None

  def render_html(self, template_name, **kwargs):
    kwargs.update({
      'settings': self.settings,
      'STATIC_URL': self.settings.get('static_url_prefix', '/static/'),
      'request': self.request,
      'current_user': self.current_user,
      'xsrf_token': self.xsrf_token,
      'xsrf_form_html': self.xsrf_form_html,
    })
    content = self.render_template(template_name, **kwargs)
    self.write(content)

这样就可以在tornado中替换self.render为self.render_html了.

Python 相关文章推荐
Python基于smtplib实现异步发送邮件服务
May 28 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
Python元组及文件核心对象类型详解
Feb 11 Python
深入分析python中整型不会溢出问题
Jun 18 Python
Django添加sitemap的方法示例
Aug 06 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Python中常见的数制转换有哪些
May 27 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
python 自动识别并连接串口的实现
Jan 19 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 #Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 #Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 #Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 #Python
在Python中定义和使用抽象类的方法
Jun 30 #Python
Python中functools模块的常用函数解析
Jun 30 #Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 #Python
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
python获取url的返回信息方法
2018/12/17 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
迟到检讨书800字
2014/01/13 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
孩子教育的心得体会
2014/09/01 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
书法社团活动总结
2015/05/07 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
python如何查找列表中元素的位置
2022/05/30 Python