diff --git a/examples/__init__.py b/examples/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/examples/hello/__init__.py b/examples/hello/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/examples/hello/urls.py b/examples/hello/urls.py
new file mode 100644
index 0000000000..e57c2b8e8c
--- /dev/null
+++ b/examples/hello/urls.py
@@ -0,0 +1,10 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('examples.hello.views',
+ (r'^html/$', 'hello_html'),
+ (r'^text/$', 'hello_text'),
+ (r'^write/$', 'hello_write'),
+ (r'^metadata/$', 'metadata'),
+ (r'^getdata/$', 'get_data'),
+ (r'^postdata/$', 'post_data'),
+)
diff --git a/examples/hello/views.py b/examples/hello/views.py
new file mode 100644
index 0000000000..07f955a38d
--- /dev/null
+++ b/examples/hello/views.py
@@ -0,0 +1,55 @@
+from django.http import HttpResponse
+from django.utils.html import escape
+
+def hello_html(request):
+ "This view is a basic 'hello world' example in HTML."
+ return HttpResponse('
Hello, world.
')
+
+def hello_text(request):
+ "This view is a basic 'hello world' example in plain text."
+ return HttpResponse('Hello, world.', mimetype='text/plain')
+
+def hello_write(request):
+ "This view demonstrates how an HttpResponse object has a write() method."
+ r = HttpResponse()
+ r.write("Here's a paragraph.
")
+ r.write("Here's another paragraph.
")
+ return r
+
+def metadata(request):
+ "This view demonstrates how to retrieve request metadata, such as HTTP headers."
+ r = HttpResponse('All about you
')
+ r.write("Here's all known metadata about your request, according to request.META
:
")
+ r.write('')
+ meta_items = request.META.items()
+ meta_items.sort()
+ for k, v in meta_items:
+ r.write('%s | %r |
' % (k, v))
+ r.write('
')
+ return r
+
+def get_data(request):
+ "This view demonstrates how to retrieve GET data."
+ r = HttpResponse()
+ if request.GET:
+ r.write('GET data found! Here it is:
')
+ r.write('' % ''.join(['%s: %r' % (escape(k), escape(v)) for k, v in request.GET.items()]))
+ r.write('')
+ return r
+
+def post_data(request):
+ "This view demonstrates how to retrieve POST data."
+ r = HttpResponse()
+ if request.POST:
+ r.write('POST data found! Here it is:
')
+ r.write('' % ''.join(['%s: %r' % (escape(k), escape(v)) for k, v in request.POST.items()]))
+ r.write('')
+ return r
diff --git a/examples/manage.py b/examples/manage.py
new file mode 100644
index 0000000000..008aeeb72b
--- /dev/null
+++ b/examples/manage.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+from django.core.management import execute_manager
+try:
+ import settings # Assumed to be in the same directory.
+except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
+ sys.exit(1)
+
+if __name__ == "__main__":
+ execute_manager(settings)
diff --git a/examples/settings.py b/examples/settings.py
new file mode 100644
index 0000000000..aa54a34386
--- /dev/null
+++ b/examples/settings.py
@@ -0,0 +1,5 @@
+# Django settings for the example project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+ROOT_URLCONF = 'examples.urls'
diff --git a/examples/urls.py b/examples/urls.py
new file mode 100644
index 0000000000..69b465f65d
--- /dev/null
+++ b/examples/urls.py
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+ (r'^$', 'examples.views.index'),
+ (r'^hello/', include('examples.hello.urls')),
+)
diff --git a/examples/views.py b/examples/views.py
new file mode 100644
index 0000000000..902bfda0f8
--- /dev/null
+++ b/examples/views.py
@@ -0,0 +1,12 @@
+from django import http
+
+def index(request):
+ r = http.HttpResponse('Django examples
')
+ return r