Django与Mako Jinja2模板的比较使用:render_to_response进行比较。问题?

时间:2011-01-07 04:44:02

标签: django testing django-templates mako jinja2

我正在使用Django来构建我的Web项目。众所周知,mako和Jinja2模板比Django给出的模板更快,我开始尝试使用Django的render_to_response方法将mako和Jinja2集成到Django中。经过大量研究,我终于找到了实现这一目标的方法。然而,在我的集成中,jmeter的性能类似于Jinja2(3ms)> Django的模板(50ms)> mako(218ms)。

如果我错了什么?....或者请帮助建议一些最佳实践来整合jinja2和mako。

以下是编码()

Mako2django.py

from django.http import HttpResponse
from django.template import Context
from mako.lookup import TemplateLookup
from mysite.settings import TEMPLATE_DIRS 

   def render_to_mako(t,c=None,context_instance=None):
   path = TEMPLATE_DIRS
   makolookup = TemplateLookup(directories=[path],output_encoding='utf-   8',input_encoding='utf-8')
mako_temp = makolookup.get_template(t)
if context_instance:
    context_instance.update(c)
else:
    context_instance = Context(c)
data = {}
for d in context_instance:data.update(d)
return HttpResponse(mako_temp.render(**data))

Jinja2django.py

from django.http import HttpResponse
from django.conf import settings
from jinja2 import Environment, ChoiceLoader, FileSystemLoader

# Setup environment
default_mimetype = getattr(settings, 'DEFAULT_CONTENT_TYPE')

# Create the Jinja2 Environment
   env = Environment(
   line_statement_prefix='%',
   line_comment_prefix='##',
   loader=ChoiceLoader([FileSystemLoader(path) for path in getattr(settings,       'TEMPLATE_DIRS', ())]))

def render_to_string(filename, context={}):
   return env.get_template(filename).render(**context)

def render_to_jinja2(filename, context={},mimetype=default_mimetype, request = None):
   if request: context['request'] = request
   return HttpResponse(render_to_string(filename, context),mimetype=mimetype)

view.py与下面的内容类似

from draft.jinja2django import render_to_jinja2

def view1(request):
    b = "helloworld"
    return render_to_jinja2('testjinja.html', context={"test":b})

1 个答案:

答案 0 :(得分:2)

从Django 1.2开始,您可以创建返回Template对象的自定义模板加载器。这样你可以使用模板系统制作django的render_to_response,render_to_string和对应物。

我正在使用这个: https://gist.github.com/972162

它透明地加载Jinja2模板,并回退到管理员,contrib和第三方应用程序的Django模板。