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.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15252 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
8308ad4f05
commit
19bfdadc43
|
@ -89,17 +89,18 @@ class ExceptionReporter:
|
||||||
for loader in template_source_loaders:
|
for loader in template_source_loaders:
|
||||||
try:
|
try:
|
||||||
module = import_module(loader.__module__)
|
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
|
# NOTE: This assumes exc_value is the name of the template that
|
||||||
# the loader attempted to load.
|
# the loader attempted to load.
|
||||||
template_list = [{'name': t, 'exists': os.path.exists(t)} \
|
template_list = [{'name': t, 'exists': os.path.exists(t)} \
|
||||||
for t in source_list_func(str(self.exc_value))]
|
for t in source_list_func(str(self.exc_value))]
|
||||||
except (ImportError, AttributeError):
|
except (ImportError, AttributeError):
|
||||||
template_list = []
|
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({
|
self.loader_debug_info.append({
|
||||||
'loader': loader_name,
|
'loader': loader_name,
|
||||||
'templates': template_list,
|
'templates': template_list,
|
||||||
|
|
|
@ -48,3 +48,7 @@ class DebugViewTests(TestCase):
|
||||||
self.assertFalse(raising_loc.find('raise BrokenException') == -1,
|
self.assertFalse(raising_loc.find('raise BrokenException') == -1,
|
||||||
"Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
|
"Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
|
||||||
raising_loc)
|
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)
|
||||||
|
|
|
@ -143,6 +143,7 @@ urlpatterns += patterns('django.views.generic.simple',
|
||||||
urlpatterns += patterns('regressiontests.views.views',
|
urlpatterns += patterns('regressiontests.views.views',
|
||||||
url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'),
|
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'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'),
|
||||||
|
|
||||||
(r'^shortcuts/render_to_response/$', 'render_to_response_view'),
|
(r'^shortcuts/render_to_response/$', 'render_to_response_view'),
|
||||||
(r'^shortcuts/render_to_response/request_context/$', 'render_to_response_view_with_request_context'),
|
(r'^shortcuts/render_to_response/request_context/$', 'render_to_response_view_with_request_context'),
|
||||||
|
|
|
@ -4,7 +4,7 @@ from django import forms
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.core.urlresolvers import get_resolver
|
from django.core.urlresolvers import get_resolver
|
||||||
from django.shortcuts import render_to_response, render
|
from django.shortcuts import render_to_response, render
|
||||||
from django.template import Context, RequestContext
|
from django.template import Context, RequestContext, TemplateDoesNotExist
|
||||||
from django.views.debug import technical_500_response
|
from django.views.debug import technical_500_response
|
||||||
from django.views.generic.create_update import create_object
|
from django.views.generic.create_update import create_object
|
||||||
|
|
||||||
|
@ -120,3 +120,11 @@ def render_view_with_current_app_conflict(request):
|
||||||
'foo': 'FOO',
|
'foo': 'FOO',
|
||||||
'bar': 'BAR',
|
'bar': 'BAR',
|
||||||
}, current_app="foobar_app", context_instance=RequestContext(request))
|
}, current_app="foobar_app", context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
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())
|
||||||
|
|
Loading…
Reference in New Issue