diff --git a/django/core/management/commands/runserver.py b/django/core/management/commands/runserver.py
index fc2c694..2318416 100644
--- a/django/core/management/commands/runserver.py
+++ b/django/core/management/commands/runserver.py
@@ -1,10 +1,13 @@
 from django.core.management.base import BaseCommand, CommandError
 from optparse import make_option
 import os
+import socket
 import sys
 
 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 +23,10 @@ class Command(BaseCommand):
         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 and 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 +34,11 @@ class Command(BaseCommand):
             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'
+            addr = (enable_ipv6 and '::1') or '127.0.0.1'
 
         if not port.isdigit():
             raise CommandError("%r is not a valid port number." % port)
@@ -47,7 +54,8 @@ class Command(BaseCommand):
             print "Validating models..."
             self.validate(display_num_errors=True)
             print "\nDjango version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
-            print "Development server is running at http://%s:%s/" % (addr, port)
+            fmt_addr = (enable_ipv6 and '[%s]' % addr) or addr
+            print "Development server is running at http://%s:%s/" % (fmt_addr, port)
             print "Quit the server with %s." % quit_command
 
             # django.core.management.base forces the locale to en-us. We should
@@ -57,7 +65,7 @@ class Command(BaseCommand):
 
             try:
                 handler = AdminMediaHandler(WSGIHandler(), admin_media_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 = {
diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py
index dae4297..49cd845 100644
--- a/django/core/servers/basehttp.py
+++ b/django/core/servers/basehttp.py
@@ -12,6 +12,7 @@ import mimetypes
 import os
 import re
 import stat
+import socket
 import sys
 import urllib
 
@@ -714,8 +715,12 @@ class AdminMediaHandler(object):
         start_response(status, headers.items())
         return output
 
-def run(addr, port, wsgi_handler):
+class WSGIServerV6(WSGIServer):
+    address_family = socket.AF_INET6
+
+def run(addr, port, wsgi_handler, enable_ipv6=False):
     server_address = (addr, port)
-    httpd = WSGIServer(server_address, WSGIRequestHandler)
+    server_class = (enable_ipv6 and WSGIServerV6) or WSGIServer
+    httpd = server_class(server_address, WSGIRequestHandler)
     httpd.set_app(wsgi_handler)
     httpd.serve_forever()
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 0918f5c..6f661fd 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -563,7 +563,7 @@ Just execute ``django-admin.py runserver`` more than once.
 Note that the default IP address, 127.0.0.1, is not accessible from other
 machines on your network. To make your development server viewable to other
 machines on the network, use its own IP address (e.g. ``192.168.2.1``) or
-``0.0.0.0``.
+``0.0.0.0`` or ``::`` (with IPv6 enabled).
 
 .. django-admin-option:: --adminmedia
 
@@ -587,6 +587,17 @@ Example usage::
 
     django-admin.py runserver --noreload
 
+--ipv6
+~~~~~~
+
+Use the ``--ipv6`` option to tell Django to enable IPv6 for the development
+server. This allows you to specify IPv6 addresses in colon-delimited form and
+changes the default IP address from 127.0.0.1 to ::1.
+
+Example usage::
+
+    django-admin.py runserver --ipv6
+
 Examples of using different ports and addresses
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -598,6 +609,10 @@ Port 8000 on IP address 1.2.3.4::
 
 	django-admin.py runserver 1.2.3.4:8000
 
+Port 8000 on IPv6 address 2001:0db8:1234:5678::9::
+
+	django-admin.py runserver --ipv6 2001:0db8:1234:5678::9:8000
+
 Port 7000 on IP address 127.0.0.1::
 
     django-admin.py runserver 7000
@@ -606,6 +621,10 @@ Port 7000 on IP address 1.2.3.4::
 
     django-admin.py runserver 1.2.3.4:7000
 
+Port 7000 on IPv6 address 2001:0db8:1234:5678::9::
+
+    django-admin.py runserver --ipv6 2001:0db8:1234:5678::9:7000
+
 Serving static files with the development server
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
