diff --git a/django/conf/app_template/__init__.py b/django/conf/app_template/__init__.py index e69de29bb2d..62d8ec926bd 100644 --- a/django/conf/app_template/__init__.py +++ b/django/conf/app_template/__init__.py @@ -0,0 +1 @@ +default_app_config = '{{ app_name }}.apps.{{ camel_case_app_name }}Config' diff --git a/django/conf/app_template/apps.py b/django/conf/app_template/apps.py new file mode 100644 index 00000000000..9b2ce5289c5 --- /dev/null +++ b/django/conf/app_template/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class {{ camel_case_app_name }}Config(AppConfig): + name = '{{ app_name }}' diff --git a/django/core/management/templates.py b/django/core/management/templates.py index 2aa9b021a26..3addb068f7b 100644 --- a/django/core/management/templates.py +++ b/django/core/management/templates.py @@ -98,10 +98,13 @@ class TemplateCommand(BaseCommand): base_name = '%s_name' % app_or_project base_subdir = '%s_template' % app_or_project base_directory = '%s_directory' % app_or_project + camel_case_name = 'camel_case_%s_name' % app_or_project + camel_case_value = ''.join(x for x in name.title() if x != '_') context = Context(dict(options, **{ base_name: name, base_directory: top_dir, + camel_case_name: camel_case_value, 'docs_version': get_docs_version(), 'django_version': django.__version__, 'unicode_literals': '' if six.PY3 else 'from __future__ import unicode_literals\n\n', diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt index 37154365ff4..d55b748eed8 100644 --- a/docs/ref/django-admin.txt +++ b/docs/ref/django-admin.txt @@ -1094,8 +1094,13 @@ with the ``--name`` option. The :class:`template context options) - ``app_name`` -- the app name as passed to the command - ``app_directory`` -- the full path of the newly created app +- ``camel_case_app_name`` -- the app name in camel case format - ``docs_version`` -- the version of the documentation: ``'dev'`` or ``'1.x'`` +.. versionadded:: 1.9 + + ``camel_case_app_name`` was added. + .. _render_warning: .. warning:: diff --git a/docs/releases/1.9.txt b/docs/releases/1.9.txt index e1f7439b88a..3aa6c495dec 100644 --- a/docs/releases/1.9.txt +++ b/docs/releases/1.9.txt @@ -275,6 +275,9 @@ Management Commands * The :djadmin:`createcachetable` command now has a ``--dry-run`` flag to print out the SQL rather than execute it. +* The :djadmin:`startapp` command creates an ``apps.py`` file and adds + ``default_app_config`` in ``__init__.py``. + Models ^^^^^^ diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 4b17690c1d8..c635de05df9 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -592,6 +592,14 @@ class DjangoAdminSettingsDirectory(AdminScriptTestCase): self.addCleanup(shutil.rmtree, app_path) self.assertNoOutput(err) self.assertTrue(os.path.exists(app_path)) + with open(os.path.join(app_path, 'apps.py'), 'r') as f: + content = f.read() + self.assertIn("class SettingsTestConfig(AppConfig)", content) + self.assertIn("name = 'settings_test'", content) + with open(os.path.join(app_path, '__init__.py'), 'r') as f: + content = f.read() + expected_content = "default_app_config = 'settings_test.apps.SettingsTestConfig'" + self.assertIn(expected_content, content) if not PY3: with open(os.path.join(app_path, 'models.py'), 'r') as fp: content = fp.read()