From 173aa5199737c60ab883a0469684e83c01604ce8 Mon Sep 17 00:00:00 2001 From: Baptiste Mispelon Date: Sat, 22 Feb 2014 15:36:49 +0100 Subject: [PATCH] Fixed #21435 -- Improved error message when urlconf is empty. The new error message now hints that the most likely issue is a circular import. Thanks to trac user elena for the report and to bpeschier for the original patch. --- django/core/urlresolvers.py | 8 +++++++- tests/urlpatterns_reverse/tests.py | 6 ++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 1dca15b4aa..08aaa40493 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -346,11 +346,17 @@ class RegexURLResolver(LocaleRegexProvider): @property def url_patterns(self): + # urlconf_module might be a valid set of patterns, so we default to it patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) try: iter(patterns) except TypeError: - raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name) + msg = ( + "The included urlconf '{name}' does not appear to have any " + "patterns in it. If you see valid patterns in the file then " + "the issue is probably caused by a circular import." + ) + raise ImproperlyConfigured(msg.format(name=self.urlconf_name)) return patterns def _resolve_special(self, view_type): diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py index 95cd2cc8b4..02ac4e31ad 100644 --- a/tests/urlpatterns_reverse/tests.py +++ b/tests/urlpatterns_reverse/tests.py @@ -161,8 +161,10 @@ class NoURLPatternsTests(TestCase): resolver = RegexURLResolver(r'^$', self.urls) self.assertRaisesMessage(ImproperlyConfigured, - "The included urlconf urlpatterns_reverse.no_urls " - "doesn't have any patterns in it", getattr, resolver, 'url_patterns') + "The included urlconf 'urlpatterns_reverse.no_urls' does not " + "appear to have any patterns in it. If you see valid patterns in " + "the file then the issue is probably caused by a circular import.", + getattr, resolver, 'url_patterns') class URLPatternReverse(TestCase):