2011-01-07 2 views
2

J'utilise Django pour construire mon projet web. Comme on sait que mako et Jinja2 sont plus rapides que ceux de Django, je commence à trouver le moyen d'intégrer mako et Jinja2 dans Django en utilisant la méthode render_to_response de Django. Après beaucoup de recherches, j'ai enfin trouvé le moyen d'y arriver. Cependant, dans mon intégration, la performance du jmeter est quelque chose comme Jinja2 (3ms)> le template de Django (50ms)> mako (218ms).Intégration de Django avec la comparaison de modèles Mako Jinja2 en utilisant: render_to_response. Problème?

Si je me suis trompé avec quelque chose? .... Ou aider à conseiller quelques bonnes pratiques pour intégrer jinja2 et mako.

est en dessous du codage()

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) 

Le view.py est similaire comme ci-dessous

from draft.jinja2django import render_to_jinja2 

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

Connexe: http://stackoverflow.com/questions/4336713/django-switching-to-jinja2. – alecxe

Répondre

2

Démarrage de Django 1. 2 vous pouvez créer votre chargeur de gabarit personnalisé qui renvoie votre objet Template. En faisant cela, vous pouvez rendre render_to_response de django, render_to_string et counterparts en utilisant votre système de template.

J'utilise celui-ci: https://gist.github.com/972162

Il charge Jinja2 modèles de manière transparente et retombe à des modèles de Django pour admin, contrib et applications tierces.

Questions connexes