Интеграция Django с шаблоном Mako Jinja2, сравнение с использованием: render_to_response. Проблема?

Я использую Django для создания своего веб-проекта. Поскольку известно, что шаблон mako и Jinja2 быстрее, чем тот, который предоставлен Django, я начинаю искать способ интеграции mako и Jinja2 в Django с использованием метода Django render_to_response. После долгих исследований я наконец выяснил, как это сделать. Однако в моей интеграции производительность jmeter примерно такая: Jinja2 (3 мс)> шаблон Django (50 мс)> mako (218 мс).

Если я что-то сделал не так? .... Или, пожалуйста, помогите посоветовать некоторые передовые методы интеграции 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})

person chow    schedule 07.01.2011    source источник
comment
Связано: stackoverflow.com/questions/4336713/django-switching-to- jinja2.   -  person alecxe    schedule 15.12.2015


Ответы (1)


Начиная с Django 1.2, вы можете создать собственный загрузчик шаблонов, который возвращает ваш объект Template. Поступая так, вы можете сделать рендер django render_to_response, render_to_string и их аналоги с использованием вашей системы шаблонов.

Я использую этот: https://gist.github.com/972162

Он прозрачно загружает шаблоны Jinja2 и возвращается к шаблонам Django для приложений администратора, contrib и сторонних приложений.

person Suor    schedule 14.05.2011