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

Posted

技术标签:

【中文标题】Django 与 Mako Jinja2 模板比较的集成使用:render_to_response。问题?【英文标题】:Django integration with Mako Jinja2 template comparison using : render_to_response. Problem? 【发布时间】:2011-06-05 02:05:51 【问题描述】:

我正在使用 Django 构建我的网络项目。众所周知,mako 和 Jinja2 模板比 Django 提供的更快,我开始寻找使用 Django 的 render_to_response 方法将 mako 和 Jinja2 集成到 Django 中的方法。经过大量研究,我终于找到了实现这一目标的方法。但是,在我的集成中,jmeter 的性能类似于 Jinja2 (3ms) > Django's template (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)

【问题讨论】:

相关:***.com/questions/4336713/django-switching-to-jinja2. 【参考方案1】:

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

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

它透明地加载 Jinja2 模板并回退到 Django 模板用于管理、贡献和第三方应用程序。

【讨论】:

以上是关于Django 与 Mako Jinja2 模板比较的集成使用:render_to_response。问题?的主要内容,如果未能解决你的问题,请参考以下文章

Mako

带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?

Mako 还是 Jinja2? [关闭]

第四章 Jinja2模版

Flask模板

使用 Django 模板标签的 Mako 模板