File tree Expand file tree Collapse file tree 3 files changed +31
-5
lines changed
tests/regressiontests/urlpatterns_reverse Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Original file line number Diff line number Diff line change @@ -284,7 +284,12 @@ def _get_url_patterns(self):
284
284
url_patterns = property (_get_url_patterns )
285
285
286
286
def _resolve_special (self , view_type ):
287
- callback = getattr (self .urlconf_module , 'handler%s' % view_type )
287
+ callback = getattr (self .urlconf_module , 'handler%s' % view_type , None )
288
+ if not callback :
289
+ # No handler specified in file; use default
290
+ # Lazy import, since urls.defaults imports this file
291
+ from django .conf .urls import defaults
292
+ callback = getattr (defaults , 'handler%s' % view_type )
288
293
try :
289
294
return get_callable (callback ), {}
290
295
except (ImportError , AttributeError ), e :
Original file line number Diff line number Diff line change @@ -356,6 +356,22 @@ def test_callable_handers(self):
356
356
self .assertEqual (self .callable_resolver .resolve404 (), handler )
357
357
self .assertEqual (self .callable_resolver .resolve500 (), handler )
358
358
359
+ class DefaultErrorHandlerTests (TestCase ):
360
+ urls = 'regressiontests.urlpatterns_reverse.urls_without_full_import'
361
+
362
+ def test_default_handler (self ):
363
+ "If the urls.py doesn't specify handlers, the defaults are used"
364
+ try :
365
+ response = self .client .get ('/test/' )
366
+ self .assertEquals (response .status_code , 404 )
367
+ except AttributeError :
368
+ self .fail ("Shouldn't get an AttributeError due to undefined 404 handler" )
369
+
370
+ try :
371
+ self .assertRaises (ValueError , self .client .get , '/bad_view/' )
372
+ except AttributeError :
373
+ self .fail ("Shouldn't get an AttributeError due to undefined 500 handler" )
374
+
359
375
class NoRootUrlConfTests (TestCase ):
360
376
"""Tests for handler404 and handler500 if urlconf is None"""
361
377
urls = None
Original file line number Diff line number Diff line change
1
+ from django .http import HttpResponse
2
+
1
3
def empty_view (request , * args , ** kwargs ):
2
- pass
4
+ return HttpResponse ( '' )
3
5
4
6
def kwargs_view (request , arg1 = 1 , arg2 = 2 ):
5
- pass
7
+ return HttpResponse ( '' )
6
8
7
9
def absolute_kwargs_view (request , arg1 = 1 , arg2 = 2 ):
8
- pass
10
+ return HttpResponse ( '' )
9
11
10
12
class ViewClass (object ):
11
13
def __call__ (self , request , * args , ** kwargs ):
12
- pass
14
+ return HttpResponse ( '' )
13
15
14
16
view_class_instance = ViewClass ()
17
+
18
+ def bad_view (request , * args , ** kwargs ):
19
+ raise ValueError ("I don't think I'm getting good value for this view" )
You can’t perform that action at this time.
0 commit comments