2011-01-07 8 views
2

私はWebプロジェクトを構築するためにDjangoを使用しています。 MakoとJinja2のテンプレートがDjangoの方が速いことがわかっているので、Djangoのrender_to_responseメソッドを使ってmakoとJinja2をDjangoに統合する方法を見つけることにします。多くの研究の後、私は最終的にこれを実現させる方法を見つけ出す。しかし、私の統合では、jmeterのパフォーマンスはJinja2(3ms)> Djangoのテンプレート(50ms)> mako(218ms)のようなものです。DjangoとMako Jinja2テンプレートの比較は、render_to_responseを使用して行います。問題?

もし私が何か問題があったら... ...または、plsはjinja2とmakoを統合するためのベストプラクティスをアドバイスするのに役立ちます。以下

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}) 
+0

関連:http://stackoverflow.com/questions/4336713/django-switching-to-jinja2。 – alecxe

答えて

2

起動以下同様であるコード()

Mako2django.pyありますDjango 1から。 2では、Templateオブジェクトを返すカスタムテンプレートローダーを作成できます。これを行うことで、djangoのrender_to_response、render_to_string、および対応するものをテンプレートシステムを使ってレンダリングすることができます。

私はこの1つを使用しています: https://gist.github.com/972162

それは透過的にJinja2のテンプレートをロードし、管理者、寄贈およびサードパーティのアプリのために戻ってDjangoのテンプレートに落ちます。

関連する問題