为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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
用python实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
python检测某个变量是否有定义的方法
May 20 Python
你应该知道的python列表去重方法
Jan 17 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
python适合人工智能的理由和优势
Jun 28 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python文件和文件夹复制函数
Feb 07 Python
Django 再谈一谈json序列化
Mar 16 Python
python中如何进行连乘计算
May 28 Python
Keras搭建自编码器操作
Jul 03 Python
python实现代码审查自动回复消息
Feb 01 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
77A一级收信机修理记
2021/03/02 无线电
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
玩转方法:call和apply
2014/05/08 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
js选择器全面解析
2016/06/27 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
js实现五星评价功能
2017/03/08 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python两种注释用法的示例
2020/10/09 Python
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
小学教师教学反思
2016/02/24 职场文书
七年级作文之下雨天
2019/12/23 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python