diff -r 86ae13d9baaf -r 302c8b593c9d django/core/management/base.py
--- a/django/core/management/base.py
+++ b/django/core/management/base.py
@@ -357,7 +357,8 @@
         """
         raise NotImplementedError()
 
-def copy_helper(style, app_or_project, name, directory, other_name=''):
+def copy_helper(style, app_or_project, name, directory, other_name='',
+                template_dir=None):
     """
     Copies either a Django application layout template or a Django project
     layout template into the specified directory.
@@ -385,10 +386,11 @@
     except OSError, e:
         raise CommandError(e)
 
-    # Determine where the app or project templates are. Use
-    # django.__path__[0] because we don't know into which directory
-    # django has been installed.
-    template_dir = os.path.join(django.__path__[0], 'conf', '%s_template' % app_or_project)
+    if not template_dir:
+        # Determine where the app or project templates are. Use
+        # django.__path__[0] because we don't know into which directory
+        # django has been installed.
+        template_dir = os.path.join(django.__path__[0], 'conf', '%s_template' % app_or_project)
 
     for d, subdirs, files in os.walk(template_dir):
         relative_dir = d[len(template_dir)+1:].replace('%s_name' % app_or_project, name)
diff -r 86ae13d9baaf -r 302c8b593c9d django/core/management/commands/startapp.py
--- a/django/core/management/commands/startapp.py
+++ b/django/core/management/commands/startapp.py
@@ -1,5 +1,5 @@
 import os
-
+from optparse import make_option
 from django.core.management.base import copy_helper, CommandError, LabelCommand
 from django.utils.importlib import import_module
 
@@ -8,6 +8,14 @@
     args = "[appname]"
     label = 'application name'
 
+    option_list = LabelCommand.option_list + (
+        make_option('--template',
+                    action='store',
+                    dest='template_dir',
+                    default=None,
+                    help='Path to a custom project template'),
+        )
+
     requires_model_validation = False
     # Can't import settings during this command, because they haven't
     # necessarily been created.
@@ -33,7 +41,8 @@
         else:
             raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name." % app_name)
 
-        copy_helper(self.style, 'app', app_name, directory, project_name)
+        copy_helper(self.style, 'app', app_name, directory, project_name,
+                    template_dir=options['template_dir'])
 
 class ProjectCommand(Command):
     help = ("Creates a Django app directory structure for the given app name"
diff -r 86ae13d9baaf -r 302c8b593c9d django/core/management/commands/startproject.py
--- a/django/core/management/commands/startproject.py
+++ b/django/core/management/commands/startproject.py
@@ -2,6 +2,7 @@
 from django.utils.importlib import import_module
 import os
 import re
+from optparse import make_option
 from random import choice
 
 class Command(LabelCommand):
@@ -9,6 +10,14 @@
     args = "[projectname]"
     label = 'project name'
 
+    option_list = LabelCommand.option_list + (
+        make_option('--template',
+                    action='store',
+                    dest='template_dir',
+                    default=None,
+                    help='Path to a custom project template'),
+        )
+
     requires_model_validation = False
     # Can't import settings during this command, because they haven't
     # necessarily been created.
@@ -27,7 +36,8 @@
         else:
             raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name)
 
-        copy_helper(self.style, 'project', project_name, directory)
+        copy_helper(self.style, 'project', project_name, directory,
+                    template_dir=options['template_dir'])
 
         # Create a random SECRET_KEY hash, and put it in the main settings.
         main_settings_file = os.path.join(directory, project_name, 'settings.py')
