summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2011-01-20 23:17:37 +0000
committerRamiro Morales <cramm0@gmail.com>2011-01-20 23:17:37 +0000
commitcf7157a7a4d0ecab2e9679d3d6eabf4a02aea65d (patch)
tree809f029d4abe7c21ae62a113f7e02f2ed5afd898
parent0958f32209d680ae8002852b62c560e04bc09118 (diff)
[1.2.X] Fixed #15122 -- Restored reporting of the template files tried in the texmplate loader post mortem section of the TemplateDoesNotExit 500 error debug page. Thanks rdrey for reporting this regression.
Backport of [15252] from trunk git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15253 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/views/debug.py11
-rw-r--r--tests/regressiontests/views/tests/debug.py4
-rw-r--r--tests/regressiontests/views/urls.py1
-rw-r--r--tests/regressiontests/views/views.py15
4 files changed, 23 insertions, 8 deletions
diff --git a/django/views/debug.py b/django/views/debug.py
index fa18dfa7ac..168884d9bf 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -88,17 +88,18 @@ class ExceptionReporter:
for loader in template_source_loaders:
try:
module = import_module(loader.__module__)
- source_list_func = module.get_template_sources
+ if hasattr(loader, '__class__'):
+ source_list_func = loader.get_template_sources
+ loader_name = loader.__module__ + '.' + loader.__class__.__name__
+ else: # NOTE: Remember to remove this branch when we deprecate old template loaders in 1.4
+ source_list_func = module.get_template_sources
+ loader_name = loader.__module__ + '.' + loader.__name__
# NOTE: This assumes exc_value is the name of the template that
# the loader attempted to load.
template_list = [{'name': t, 'exists': os.path.exists(t)} \
for t in source_list_func(str(self.exc_value))]
except (ImportError, AttributeError):
template_list = []
- if hasattr(loader, '__class__'):
- loader_name = loader.__module__ + '.' + loader.__class__.__name__
- else:
- loader_name = loader.__module__ + '.' + loader.__name__
self.loader_debug_info.append({
'loader': loader_name,
'templates': template_list,
diff --git a/tests/regressiontests/views/tests/debug.py b/tests/regressiontests/views/tests/debug.py
index 4ebe37f558..c71e8c502d 100644
--- a/tests/regressiontests/views/tests/debug.py
+++ b/tests/regressiontests/views/tests/debug.py
@@ -48,3 +48,7 @@ class DebugViewTests(TestCase):
self.assertFalse(raising_loc.find('raise BrokenException') == -1,
"Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
raising_loc)
+
+ def test_template_loader_postmortem(self):
+ response = self.client.get(reverse('raises_template_does_not_exist'))
+ self.assertContains(response, 'templates/i_dont_exist.html</code> (File does not exist)</li>', status_code=500)
diff --git a/tests/regressiontests/views/urls.py b/tests/regressiontests/views/urls.py
index 0ccb988061..3464b20a44 100644
--- a/tests/regressiontests/views/urls.py
+++ b/tests/regressiontests/views/urls.py
@@ -128,4 +128,5 @@ urlpatterns += patterns('django.views.generic.simple',
urlpatterns += patterns('regressiontests.views.views',
url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'),
url(r'template_exception/(?P<n>\d+)/$', 'template_exception', name='template_exception'),
+ url(r'^raises_template_does_not_exist/$', 'raises_template_does_not_exist', name='raises_template_does_not_exist'),
)
diff --git a/tests/regressiontests/views/views.py b/tests/regressiontests/views/views.py
index 445b4ed312..bb12902fd4 100644
--- a/tests/regressiontests/views/views.py
+++ b/tests/regressiontests/views/views.py
@@ -1,11 +1,12 @@
import sys
-from django.http import HttpResponse, HttpResponseRedirect
from django import forms
-from django.views.debug import technical_500_response
-from django.views.generic.create_update import create_object
+from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import get_resolver
from django.shortcuts import render_to_response
+from django.template import TemplateDoesNotExist
+from django.views.debug import technical_500_response
+from django.views.generic.create_update import create_object
from regressiontests.views import BrokenException, except_args
@@ -57,3 +58,11 @@ def template_exception(request, n):
return render_to_response('debug/template_exception.html',
{'arg': except_args[int(n)]})
+def raises_template_does_not_exist(request):
+ # We need to inspect the HTML generated by the fancy 500 debug view but
+ # the test client ignores it, so we send it explicitly.
+ try:
+ return render_to_response('i_dont_exist.html')
+ except TemplateDoesNotExist:
+ return technical_500_response(request, *sys.exc_info())
+