现成包可以参考这里:  http://niwibe.github.io/django-jinja/

Requirements

  • Python 2.7, 3.3 or 3.4

  • Django 1.4, 1.5, 1.6 and 1.7

  • jinja2 >= 2.7.0

不过下面的实现没有用到上面的django-jinja 扩展。

不知道随着django版本的演变,又没有吸取jinjia2设计的精华,如果有,那么再手工集成就是多此一举。决定来个性能测试,环境:

win7 家庭版 64bit / python 2.7.3 / django 1.6.5

由于需要页面每次请求都返回不同的内容,因此简单做了个随机数,视图如下:

from django.shortcuts import render
from django.http import HttpResponse
import random
# Create your views here.
def getRandom(req):
return render(req,'testjj.txt',{'r_int':random.randint(1,10000)})

  

在虚拟机上用ab进行测试:

 ab -c 5 -n 1000  http://192.168.1.8:8000/

结果如下:

Concurrency Level:      5
Time taken for tests: 5.021 seconds
Complete requests: 1000
Failed requests: 95
(Connect: 0, Receive: 0, Length: 95, Exceptions: 0)
Write errors: 0
Total transferred: 165895 bytes
HTML transferred: 3895 bytes
Requests per second: 199.18 [#/sec] (mean)
Time per request: 25.103 [ms] (mean)
Time per request: 5.021 [ms] (mean, across all concurrent requests)
Transfer rate: 32.27 [Kbytes/sec] received Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 2
Processing: 17 24 3.9 24 65
Waiting: 15 22 3.7 22 62
Total: 18 25 4.0 24 67 Percentage of the requests served within a certain time (ms)
50% 24
66% 25
75% 26
80% 26
90% 28
95% 29
98% 31
99% 41
100% 67 (longest request)

  

总时间5.021s。上面没有采用jinjia2, 下面采用jinjia2,代码修改如下,

主要是增加template_loader,ok,先看看django的默认的template loader的逻辑,默认的loader有两个,如下,可以参考这里

django.template.loaders.filesystem.Loader

django.template.loaders.app_directories.Loader

算法的核心是根据某种规则,计算出模板文件的路径,并read然后decode返回。

loader修改如下(源码参考这里,文档参考这里

from django.template.loader import BaseLoader
from django.template.loaders.app_directories import app_template_dirs
from django.template import TemplateDoesNotExist
from django.core import urlresolvers
from django.conf import settings
import jinja2 class Template(jinja2.Template):
def render(self, context):
# flatten the Django Context into a single dictionary.
context_dict = {}
for d in context.dicts:
context_dict.update(d)
return super(Template, self).render(context_dict) class Loader(BaseLoader):
is_usable = True env = jinja2.Environment(loader=jinja2.FileSystemLoader(app_template_dirs))
env.template_class = Template # These are available to all templates.
env.globals['url_for'] = urlresolvers.reverse
env.globals['MEDIA_URL'] = settings.MEDIA_URL
#env.globals['STATIC_URL'] = settings.STATIC_URL def load_template(self, template_name, template_dirs=None):
try:
template = self.env.get_template(template_name)
except jinja2.TemplateNotFound:
raise TemplateDoesNotExist(template_name)
return template, template.filename

然后在template_loaders中添加该loader。并重新测试,结果如下:

Time taken for tests:   4.223 seconds
Complete requests: 1000
Failed requests: 100
(Connect: 0, Receive: 0, Length: 100, Exceptions: 0)
Write errors: 0
Total transferred: 165887 bytes
HTML transferred: 3887 bytes
Requests per second: 236.78 [#/sec] (mean)
Time per request: 21.117 [ms] (mean)
Time per request: 4.223 [ms] (mean, across all concurrent requests)
Transfer rate: 38.36 [Kbytes/sec] received Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 2
Processing: 12 20 3.3 20 49
Waiting: 11 18 3.0 17 47
Total: 12 21 3.3 20 50 Percentage of the requests served within a certain time (ms)
50% 20
66% 21
75% 22
80% 23
90% 24
95% 26
98% 29
99% 34
100% 50 (longest request)

 可见,总时间少了接近1秒!

对比图如下:

因此,django团队,在这块貌似还是没有采取与jinja2一样的技术或者机制咯。看来大有比较自己集成。

django-jinjia 集成的更多相关文章

  1. Django开发——集成的子框架django.contrib

    Django开发——集成的子框架django.contrib 2018年09月11日 19:32:42 Mrkang1314 阅读数:63  https://blog.csdn.net/mashaok ...

  2. 用Jenkins构建Django持续集成环境

    用Jenkins构建Django持续集成环境 - V2EX https://www.v2ex.com/t/32054

  3. Django优雅集成MongoDB

    Django优雅集成MongoDB   将Django与MongoDB集成 在不更改Django ORM的情况下,将MongoDB用作Django项目的后端数据库.使用Django Admin在Mon ...

  4. django之集成七牛云对象存储

    Python3 + Django2.0 集成 "七牛云" 对象存储 (SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error- ...

  5. django之集成阿里云通信(发送手机短信验证码)

    python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...

  6. 在django中集成ckeditor富文本

    目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ...

  7. django xadmin 集成DjangoUeditor富文本编辑器

    本文档记录自己的学习历程! 介绍 Ueditor HTML编辑器是百度开源的在线HTML编辑器,功能非常强大 额外功能 解决图片视频等无法上传显示问题 Ueditor下载地址 https://gith ...

  8. django后台集成富文本编辑器Tinymce的使用

    富文本编辑器Tinymce是使用步骤: 1.首先去python的模块包的网站下载一个django-tinymce的包 2.下载上图的安装包,然后解压,进入文件夹,执行: (pychrm直接运行命令pi ...

  9. django之集成第三方支付平台PaysAPI与百度云视频点播服务接入

    PaysAPI直接查看接口文档:https://www.paysapi.com/docindex,比较简单 百度云视频点播服务接入: 1. 准备工作:百度云的示例:http://cyberplayer ...

  10. Django rest framework集成微博第三方登录

    Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...

随机推荐

  1. 【团队项目演示】FZU5BOYS之团队项目链接汇总

    FZU5BOYS      项目冲刺之博客汇总 Alpha版本 Day One Day Two Day Three Day Four Day Five Day Six Day Seven Day Ei ...

  2. 报课系统APP

    031302307黄丰润 031302343张晓燕 #NABCD模型分析 合理分析需求有助于说服客户,所以我们有如下分析 N(need)--客户需要什么 负责人需要将选课信息和选课表格一起发送给所负责 ...

  3. HDU 3401 Trade dp+单调队列优化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)Mem ...

  4. Html巩固

    1.html元素都支持全局属性(通用的属性)和事件属性.     a标签:定义一个超文本链接,链接到另一个超文本文件的! button:定义一个点击按钮,按钮是出发当前页面的事件.

  5. Apache MINA(一)

    Apache MINA is a network application framework which helps users develop high performance and high s ...

  6. 【CodeForces 557B】Pasha and Tea

    题 题意 总共有 w 克蛋糕,2n 个盘子,第 i 个盘子容量为 ai ,n 个女孩和 n 个男孩,男孩得到的是女孩得到的蛋糕的两倍,求他们得到蛋糕的最大值. 分析 把盘子从小到大排序,然后 女生得到 ...

  7. Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)

    一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...

  8. angularjs-$interval使用

    1. 简单使用 var app = angular.module("app",[]); app.controller("AppCtrl", function($ ...

  9. Android 使用Parcelable序列化对象

    转:http://ipjmc.iteye.com/blog/1314145       Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...

  10. configure new linux

    vim   http://www.cnblogs.com/wswang/p/5088078.html zsh  sh -c "$(curl -fsSL https://raw.github. ...