diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2015-02-05 11:38:58 +0100 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2015-02-05 20:06:18 +0100 |
| commit | 27f9ff459b17ccce8177f454174232a6ec5a79e7 (patch) | |
| tree | 749f828ec838fda7dc1643d6587784284aae4f6d | |
| parent | 9410d69835c69562df2120495a0a8b9710f28df3 (diff) | |
Caught all exceptions raised by Engine.get_default().
In addition to ImproperlyConfigured, Engine.get_default() may also raise
ImportError or other exceptions. It's better to catch all exceptions in
places where the default engine isn't strictly required.
| -rw-r--r-- | django/contrib/admin/sites.py | 10 | ||||
| -rw-r--r-- | django/views/debug.py | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py index 54d1e2de7a..8389a3fe09 100644 --- a/django/contrib/admin/sites.py +++ b/django/contrib/admin/sites.py @@ -177,8 +177,14 @@ class AdminSite(object): "setting in order to use the admin application.") try: default_template_engine = Engine.get_default() - except ImproperlyConfigured: - # Skip the check if the user has a non-trivial TEMPLATES setting + except Exception: + # Skip this non-critical check: + # 1. if the user has a non-trivial TEMPLATES setting and Django + # can't find a default template engine + # 2. if anything goes wrong while loading template engines, in + # order to avoid raising an exception from a confusing location + # Catching ImproperlyConfigured suffices for 1. but 2. requires + # catching all exceptions. pass else: if ('django.contrib.auth.context_processors.auth' diff --git a/django/views/debug.py b/django/views/debug.py index 03387efaaf..19254c5cf2 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -7,7 +7,6 @@ import sys import types from django.conf import settings -from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import resolve, Resolver404 from django.http import (HttpResponse, HttpResponseNotFound, HttpRequest, build_request_repr) @@ -282,7 +281,11 @@ class ExceptionReporter(object): """Return a dictionary containing traceback information.""" try: default_template_engine = Engine.get_default() - except ImproperlyConfigured: + except Exception: + # Since the debug view must never crash, catch all exceptions. + # If Django can't find a default template engine, get_default() + # raises ImproperlyConfigured. If some template engines fail to + # load, any exception may be raised. default_template_engine = None # TODO: add support for multiple template engines (#24120). |
