summaryrefslogtreecommitdiff
path: root/django/apps
diff options
context:
space:
mode:
Diffstat (limited to 'django/apps')
-rw-r--r--django/apps/config.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/django/apps/config.py b/django/apps/config.py
index aeb47923d8..f5c971fc9c 100644
--- a/django/apps/config.py
+++ b/django/apps/config.py
@@ -118,8 +118,21 @@ class AppConfig:
cls = getattr(mod, cls_name)
except AttributeError:
if module is None:
- # If importing as an app module failed, that error probably
- # contains the most informative traceback. Trigger it again.
+ # If importing as an app module failed, check if the module
+ # contains any valid AppConfigs and show them as choices.
+ # Otherwise, that error probably contains the most informative
+ # traceback, so trigger it again.
+ candidates = sorted(
+ repr(name) for name, candidate in mod.__dict__.items()
+ if isinstance(candidate, type) and
+ issubclass(candidate, AppConfig) and
+ candidate is not AppConfig
+ )
+ if candidates:
+ raise ImproperlyConfigured(
+ "'%s' does not contain a class '%s'. Choices are: %s."
+ % (mod_path, cls_name, ', '.join(candidates))
+ )
import_module(entry)
else:
raise