summaryrefslogtreecommitdiff
path: root/django
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:09:10 +0100
commit67787db22a3d684ce2800c80fca477af1684deab (patch)
tree3c6ec1296a612ecffcf446be9e2201b521ddaccd /django
parent5fbec369aa32d1717b7bffc169649ab5896a7ad9 (diff)
[1.8.x] 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. Backport of 27f9ff45 from master
Diffstat (limited to 'django')
-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 ab0ec1a837..bcd05ed800 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).