为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 mysqldb连接数据库
Mar 16 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python 中的 else详解
Apr 23 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
解决Mac下使用python的坑
Aug 13 Python
python numpy数组中的复制知识解析
Feb 03 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 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
php Memcache 中实现消息队列
2009/11/24 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
node.js实现快速截图
2016/08/27 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python实现list反转实例汇总
2014/11/11 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
在C#中如何实现多态
2014/07/02 面试题
商务日语毕业生自荐信
2013/11/23 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
实习指导老师意见
2015/06/04 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
MySQL8.0的WITH查询详情
2021/08/30 MySQL
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
React自定义hook的方法
2022/06/25 Javascript