from django.http import HttpResponse
from django.conf import settings
from jinja2 import PackageLoader, Environment, ChoiceLoader, FileSystemLoader
import os
from django.core.urlresolvers import get_callable
from djangotags import *
from django.utils import translation
from django.utils.thread_support import currentThread
global env
# Setup template loaders
loader_array = []
for pth in getattr(settings, 'TEMPLATE_DIRS', ()):
loader_array.append(FileSystemLoader(pth))
for app in settings.INSTALLED_APPS:
loader_array.append(PackageLoader(app))
# Setup environment
default_mimetype = getattr(settings, 'DEFAULT_CONTENT_TYPE')
global_exts = getattr(settings, 'JINJA_EXTS', ())
env = Environment(extensions=global_exts, loader=ChoiceLoader(loader_array))
if 'jinja2.ext.i18n' in global_exts:
env.install_gettext_translations(translation)
# Add user Globals, Filters, Tests
global_imports = getattr(settings, 'JINJA_GLOBALS', ())
for imp in global_imports:
method = get_callable(imp)
method_name = getattr(method,'jinja_name',None)
if not method_name == None:
env.globals[method_name] = method
else:
env.globals[method.__name__] = method
global_filters = getattr(settings, 'JINJA_FILTERS', ())
for imp in global_filters:
method = get_callable(imp)
method_name = getattr(method,'jinja_name',None)
if not method_name == None:
env.filters[method_name] = method
else:
env.filters[method.__name__] = method
global_tests = getattr(settings, 'JINJA_TESTS', ())
for imp in global_tests:
method = get_callable(imp)
method_name = getattr(method,'jinja_name',None)
if not method_name == None:
env.tests[method_name] = method
else:
env.tests[method.__name__] = method
def render_to_string(filename, context={}):
template = env.get_template(filename)
rendered = template.render(**context)
return rendered
def render_to_response(filename, context={},mimetype=default_mimetype, request = None):
if request:
context['request'] = request
rendered = render_to_string(filename, context)
return HttpResponse(rendered,mimetype=mimetype)
Comments
Why don't you use the existing ones?
(just curious)
#
Hello, thanks, I haven't been aware of that script, but I personally like mine better, as it automatically includes each applications template dir, and lets you specify custom filters, tests, etc in your project settings.
#