Created
June 14, 2015 21:21
-
-
Save carljm/9d54151291fd83f4b46c to your computer and use it in GitHub Desktop.
Django Jinja2 backend subclass with context processor support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Jinja2Backend(jinja2backend.Jinja2): | |
def __init__(self, params): | |
self.context_processors = [ | |
import_string(p) | |
for p in params['OPTIONS'].pop('context_processors', []) | |
] | |
super(Jinja2Backend, self).__init__(params) | |
def from_string(self, template_code): | |
return Template( | |
self.env.from_string(template_code), self.context_processors) | |
def get_template(self, template_name): | |
try: | |
return Template( | |
self.env.get_template(template_name), self.context_processors) | |
except jinja2.TemplateNotFound as exc: | |
six.reraise(TemplateDoesNotExist, TemplateDoesNotExist(exc.args), | |
sys.exc_info()[2]) | |
except jinja2.TemplateSyntaxError as exc: | |
six.reraise(TemplateSyntaxError, TemplateSyntaxError(exc.args), | |
sys.exc_info()[2]) | |
class Template(jinja2backend.Template): | |
def __init__(self, template, context_processors): | |
self.template = template | |
self.context_processors = context_processors | |
def render(self, context=None, request=None): | |
if context is None: | |
context = {} | |
if request is not None: | |
context['request'] = request | |
lazy_csrf_input = csrf_input_lazy(request) | |
context['csrf'] = lambda: lazy_csrf_input | |
context['csrf_input'] = lazy_csrf_input | |
context['csrf_token'] = csrf_token_lazy(request) | |
for cp in self.context_processors: | |
context.update(cp(request)) | |
return self.template.render(context) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment