diff --git a/django/core/management/commands/startapp.py b/django/core/management/commands/startapp.py
index 5581331..8c5d3ea 100644
--- a/django/core/management/commands/startapp.py
+++ b/django/core/management/commands/startapp.py
@@ -2,6 +2,9 @@ from django.core.management.base import CommandError
 from django.core.management.templates import TemplateCommand
 from django.utils.importlib import import_module
 
+import os
+from os import path
+
 
 class Command(TemplateCommand):
     help = ("Creates a Django app directory structure for the given app "
@@ -21,5 +24,15 @@ class Command(TemplateCommand):
             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)
-
+        
         super(Command, self).handle('app', app_name, target, **options)
+        
+    def get_target_dir(self, target, name):
+        top_dir = super(Command, self).get_target_dir(target, name)
+        top_dir = os.path.abspath(path.expanduser(target))
+        top_dir = os.path.join(top_dir, name)
+          
+        if not os.path.exists(top_dir):
+            os.mkdir(top_dir)
+        
+        return top_dir
diff --git a/django/core/management/templates.py b/django/core/management/templates.py
index 623aa69..5e81588 100644
--- a/django/core/management/templates.py
+++ b/django/core/management/templates.py
@@ -59,6 +59,19 @@ class TemplateCommand(BaseCommand):
     # The supported URL schemes
     url_schemes = ['http', 'https', 'ftp']
 
+    def get_target_dir(self, target, name):
+        """
+        Creates a directory for when location of the app or project 
+        are specified.
+        """
+        top_dir = os.path.abspath(path.expanduser(target))
+        if not os.path.exists(top_dir):
+            raise CommandError("Destination directory '%s' does not "
+                       "exist, please create it first." % top_dir)
+              
+        return top_dir
+        
+
     def handle(self, app_or_project, name, target=None, **options):
         self.app_or_project = app_or_project
         self.paths_to_remove = []
@@ -87,10 +100,8 @@ class TemplateCommand(BaseCommand):
                     message = e
                 raise CommandError(message)
         else:
-            top_dir = os.path.abspath(path.expanduser(target))
-            if not os.path.exists(top_dir):
-                raise CommandError("Destination directory '%s' does not "
-                                   "exist, please create it first." % top_dir)
+            top_dir = self.get_target_dir(target, name)
+
 
         extensions = tuple(
             handle_extensions(options.get('extensions'), ignored=()))
@@ -141,6 +152,7 @@ class TemplateCommand(BaseCommand):
                     # Ignore some files as they cause various breakages.
                     continue
                 old_path = path.join(root, filename)
+               
                 new_path = path.join(top_dir, relative_dir,
                                      filename.replace(base_name, name))
                 if path.exists(new_path):
