为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中的对象拷贝示例 python引用传递
Jan 23 Python
Python随机生成数模块random使用实例
Apr 13 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
用python3读取python2的pickle数据方式
Dec 25 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
在项目中寻找代码的坏命名
2012/07/14 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
小程序接口的promise化的实现方法
2019/12/11 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
python实现决策树分类(2)
2018/08/30 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
DataReader和DataSet的异同
2014/12/31 面试题
大学社团活动策划书
2014/01/26 职场文书
小小的船教学反思
2014/02/21 职场文书
公司股权转让协议书
2014/04/12 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
个人政治思想总结
2015/03/05 职场文书
网络研修随笔感言
2015/11/18 职场文书
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS