summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2015-02-05 11:38:58 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2015-02-05 20:06:18 +0100
commit27f9ff459b17ccce8177f454174232a6ec5a79e7 (patch)
tree749f828ec838fda7dc1643d6587784284aae4f6d
parent9410d69835c69562df2120495a0a8b9710f28df3 (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.py10
-rw-r--r--django/views/debug.py7
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).