Index: core/servers/basehttp.py
===================================================================
--- core/servers/basehttp.py	(revision 7871)
+++ core/servers/basehttp.py	(working copy)
@@ -658,8 +658,14 @@
         start_response(status, headers.items())
         return output
 
-def run(addr, port, wsgi_handler):
+def run(addr, port, wsgi_handler, enable_ipv6=False):
     server_address = (addr, port)
-    httpd = WSGIServer(server_address, WSGIRequestHandler)
+    if not enable_ipv6:
+        httpd = WSGIServer(server_address, WSGIRequestHandler)
+    else:
+        import socket
+        class WSGIServerV6(WSGIServer):
+            address_family = socket.AF_INET6
+        httpd = WSGIServerV6(server_address, WSGIRequestHandler)
     httpd.set_app(wsgi_handler)
     httpd.serve_forever()
Index: core/management/commands/runserver.py
===================================================================
--- core/management/commands/runserver.py	(revision 7871)
+++ core/management/commands/runserver.py	(working copy)
@@ -5,6 +5,8 @@
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
+        make_option('--ipv6', '-6', action='store_true', dest='enable_ipv6', default=False,
+            help='Enables IPv6 support.'),
         make_option('--noreload', action='store_false', dest='use_reloader', default=True,
             help='Tells Django to NOT use the auto-reloader.'),
         make_option('--adminmedia', dest='admin_media_path', default='',
@@ -20,6 +22,12 @@
         import django
         from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException
         from django.core.handlers.wsgi import WSGIHandler
+        enable_ipv6=options.get('enable_ipv6')
+        if enable_ipv6:
+                import socket
+                if not hasattr(socket, 'AF_INET6'):
+                        raise CommandError("This Python does not support IPv6.")
+
         if args:
             raise CommandError('Usage is runserver %s' % self.args)
         if not addrport:
@@ -27,11 +35,12 @@
             port = '8000'
         else:
             try:
-                addr, port = addrport.split(':')
+                addr, port = addrport.rsplit(':',1)
             except ValueError:
                 addr, port = '', addrport
         if not addr:
-            addr = '127.0.0.1'
+            if not enable_ipv6: addr = '127.0.0.1'
+            else: addr = '::1'
 
         if not port.isdigit():
             raise CommandError("%r is not a valid port number." % port)
@@ -51,7 +60,7 @@
             try:
                 path = admin_media_path or django.__path__[0] + '/contrib/admin/media'
                 handler = AdminMediaHandler(WSGIHandler(), path)
-                run(addr, int(port), handler)
+                run(addr, int(port), handler, enable_ipv6=enable_ipv6)
             except WSGIServerException, e:
                 # Use helpful error messages instead of ugly tracebacks.
                 ERRORS = {
