summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2012-02-04 13:01:30 +0000
committerJannis Leidel <jannis@leidel.info>2012-02-04 13:01:30 +0000
commitfaeee611d69717614424b6c3867cd5798ee25496 (patch)
treeb25f1fdf2e33a7d9c00c2c2be227ac3fc5f35ba6
parentbb6921ce888cfc981c4df8d5f079b0b7a4121ff6 (diff)
Fixed #17517 -- Added `--name` option to startproject and startapp management commands to be able to render files without a file extension. Thanks, Florian Apolloner.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17432 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/management/templates.py13
-rw-r--r--docs/man/django-admin.19
-rw-r--r--docs/ref/django-admin.txt6
-rw-r--r--tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/Procfile1
-rw-r--r--tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt1
-rw-r--r--tests/regressiontests/admin_scripts/tests.py18
6 files changed, 42 insertions, 6 deletions
diff --git a/django/core/management/templates.py b/django/core/management/templates.py
index 0a6a3a8932..1d26e97961 100644
--- a/django/core/management/templates.py
+++ b/django/core/management/templates.py
@@ -48,6 +48,11 @@ class TemplateCommand(BaseCommand):
help='The file extension(s) to render (default: "py") '
'Separate multiple extensions with commas, or use '
'-e multiple times.'),
+ make_option('--name', '-n', dest='files',
+ action='append', default=[],
+ help='The file name(s) to render '
+ 'Separate multiple extensions with commas, or use '
+ '-n multiple times.')
)
requires_model_validation = False
# Can't import settings during this command, because they haven't
@@ -89,10 +94,16 @@ class TemplateCommand(BaseCommand):
extensions = tuple(
handle_extensions(options.get('extensions'), ignored=()))
+ extra_files = []
+ for file in options.get('files'):
+ extra_files.extend(map(lambda x: x.strip(), file.split(',')))
if self.verbosity >= 2:
self.stdout.write("Rendering %s template files with "
"extensions: %s\n" %
(app_or_project, ', '.join(extensions)))
+ self.stdout.write("Rendering %s template files with "
+ "filenames: %s\n" %
+ (app_or_project, ', '.join(extra_files)))
base_name = '%s_name' % app_or_project
base_subdir = '%s_template' % app_or_project
@@ -142,7 +153,7 @@ class TemplateCommand(BaseCommand):
# accidentally render Django templates files
with open(old_path, 'r') as template_file:
content = template_file.read()
- if filename.endswith(extensions):
+ if filename.endswith(extensions) or filename in extra_files:
template = Template(content)
content = template.render(context)
with open(new_path, 'w') as new_file:
diff --git a/docs/man/django-admin.1 b/docs/man/django-admin.1
index 2326e827cf..af710ff5fe 100644
--- a/docs/man/django-admin.1
+++ b/docs/man/django-admin.1
@@ -115,11 +115,11 @@ name(s).
Prints the SQL statements for resetting PostgreSQL sequences for the
given app name(s).
.TP
-.BI "startapp [" "\-\-template=PATH_OR_URL" "] [" "\-\-extension=EXTENSION" "] [" "appname" "] [" "destination" "]"
+.BI "startapp [" "\-\-template=PATH_OR_URL" "] [" "\-\-extension=EXTENSION" "] [" "\-\-name=FILENAME" "] [" "appname" "] [" "destination" "]"
Creates a Django app directory structure for the given app name in
the current directory or the optional destination.
.TP
-.BI "startproject [" "\-\-template=PATH_OR_URL" "] [" "\-\-extension=EXTENSION" "] [" "projectname" "] [" "destination" "]"
+.BI "startproject [" "\-\-template=PATH_OR_URL" "] [" "\-\-extension=EXTENSION" "] [" "\-\-name=FILENAME" "] [" "projectname" "] [" "destination" "]"
Creates a Django project directory structure for the given project name
in the current directory or the optional destination.
.TP
@@ -213,9 +213,12 @@ Don't break long message lines into several lines.
.I \-a, \-\-all
Process all available locales when using makemessages..SH "ENVIRONMENT"
.TP
-.I \-a, \-\-template=PATH_OR_URL
+.I \-\-template=PATH_OR_URL
The file or directory path or URL to load the project and app templates from.
.TP
+.I \-n, \-\-name=FILENAME
+The name of an additional file to render when using app and project templates.
+.TP
.I DJANGO_SETTINGS_MODULE
In the absence of the
.BI \-\-settings
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 3010cd020c..aa514606e2 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -951,7 +951,8 @@ creating the ``myapp`` app::
When Django copies the app template files, it also renders the files
whose extension matches those passed with the ``--extension`` option (``py``
-by default) using the template engine. The :class:`template context
+by default) and those files which names are passed with the ``--name`` option
+using the template engine. The :class:`template context
<django.template.Context>` used is:
- Any option passed to the startapp command
@@ -1013,7 +1014,8 @@ when creating the ``myproject`` project::
When Django copies the project template files, it will also render the files
whose extension matches those passed with the ``--extension`` option (``py``
-by default) using the template engine. The :class:`template context
+by default) and those files which names are passed with the ``--name`` option
+using the template engine. The :class:`template context
<django.template.Context>` used is:
- Any option passed to the startproject command
diff --git a/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/Procfile b/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/Procfile
new file mode 100644
index 0000000000..032f0bcd72
--- /dev/null
+++ b/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/Procfile
@@ -0,0 +1 @@
+# some file for {{ project_name }} test project \ No newline at end of file
diff --git a/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt b/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt
new file mode 100644
index 0000000000..032f0bcd72
--- /dev/null
+++ b/tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt
@@ -0,0 +1 @@
+# some file for {{ project_name }} test project \ No newline at end of file
diff --git a/tests/regressiontests/admin_scripts/tests.py b/tests/regressiontests/admin_scripts/tests.py
index 17a2ccb194..e981f54c23 100644
--- a/tests/regressiontests/admin_scripts/tests.py
+++ b/tests/regressiontests/admin_scripts/tests.py
@@ -1489,3 +1489,21 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
self.assertNoOutput(err)
self.assertTrue(os.path.isdir(testproject_dir))
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'run.py')))
+
+ def test_file_without_extension(self):
+ "Make sure the startproject management command is able to render custom files"
+ template_path = os.path.join(test_dir, 'admin_scripts', 'custom_templates', 'project_template')
+ args = ['startproject', '--template', template_path, 'customtestproject', '-e', 'txt', '-n', 'Procfile']
+ testproject_dir = os.path.join(test_dir, 'customtestproject')
+
+ out, err = self.run_django_admin(args)
+ self.addCleanup(shutil.rmtree, testproject_dir)
+ self.assertNoOutput(err)
+ self.assertTrue(os.path.isdir(testproject_dir))
+ self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'additional_dir')))
+ base_path = os.path.join(testproject_dir, 'additional_dir')
+ for f in ('Procfile', 'additional_file.py', 'requirements.txt'):
+ self.assertTrue(os.path.exists(os.path.join(base_path, f)))
+ with open(os.path.join(base_path, f)) as fh:
+ self.assertEqual(fh.read(),
+ '# some file for customtestproject test project')