为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操作列表的常用方法分享
Feb 13 Python
Python实现远程调用MetaSploit的方法
Aug 22 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
超实用的 30 段 Python 案例
Oct 10 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
django Model层常用验证器及自定义验证器详解
Jul 15 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开发中的中文编码问题
2013/08/08 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
财务工作失职检讨书
2014/11/21 职场文书
长城的导游词
2015/01/30 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
土建施工员岗位职责
2015/04/11 职场文书