bundled/jinja2/ext/djangojinja2.py @ 9030dc9517cf
web: add basic tests This patch adds a new test module `test_web` to automate testing of web requests. For now the tests are rather simple and only check for expected status codes. To set up the flask app within the tests, it has to be configured properly. This is the reason why the app configuration part in `web.py` has been moved into an own function - now it may also be used by the test module.
| author | Oben Sonne <obensonne@googlemail.com> | 
|---|---|
| date | Mon, 02 Jul 2012 22:32:48 +0200 | 
| parents | 256716e3a3d7 | 
| children | (none) | 
# -*- coding: utf-8 -*- """ djangojinja2 ~~~~~~~~~~~~ Adds support for Jinja2 to Django. Configuration variables: ======================= ============================================= Key Description ======================= ============================================= `JINJA2_TEMPLATE_DIRS` List of template folders `JINJA2_EXTENSIONS` List of Jinja2 extensions to use `JINJA2_CACHE_SIZE` The size of the Jinja2 template cache. ======================= ============================================= :copyright: (c) 2009 by the Jinja Team. :license: BSD. """ from itertools import chain from django.conf import settings from django.http import HttpResponse from django.core.exceptions import ImproperlyConfigured from django.template.context import get_standard_processors from django.template import TemplateDoesNotExist from jinja2 import Environment, FileSystemLoader, TemplateNotFound from jinja2.defaults import DEFAULT_NAMESPACE # the environment is unconfigured until the first template is loaded. _jinja_env = None def get_env(): """Get the Jinja2 env and initialize it if necessary.""" global _jinja_env if _jinja_env is None: _jinja_env = create_env() return _jinja_env def create_env(): """Create a new Jinja2 environment.""" searchpath = list(settings.JINJA2_TEMPLATE_DIRS) return Environment(loader=FileSystemLoader(searchpath), auto_reload=settings.TEMPLATE_DEBUG, cache_size=getattr(settings, 'JINJA2_CACHE_SIZE', 50), extensions=getattr(settings, 'JINJA2_EXTENSIONS', ())) def get_template(template_name, globals=None): """Load a template.""" try: return get_env().get_template(template_name, globals=globals) except TemplateNotFound, e: raise TemplateDoesNotExist(str(e)) def select_template(templates, globals=None): """Try to load one of the given templates.""" env = get_env() for template in templates: try: return env.get_template(template, globals=globals) except TemplateNotFound: continue raise TemplateDoesNotExist(', '.join(templates)) def render_to_string(template_name, context=None, request=None, processors=None): """Render a template into a string.""" context = dict(context or {}) if request is not None: context['request'] = request for processor in chain(get_standard_processors(), processors or ()): context.update(processor(request)) return get_template(template_name).render(context) def render_to_response(template_name, context=None, request=None, processors=None, mimetype=None): """Render a template into a response object.""" return HttpResponse(render_to_string(template_name, context, request, processors), mimetype=mimetype)