summaryrefslogtreecommitdiff
path: root/django/views
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-12-07 06:02:09 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-12-07 06:02:09 +0000
commit668e8b3df933b7ed979c23d48233d59be595f734 (patch)
tree294c83abde5c6a2d0f11f35e0139c838ad00ac93 /django/views
parent374a6eaa4c7cb412d908960b193d162ad5b00060 (diff)
downloaddjango-668e8b3df933b7ed979c23d48233d59be595f734.tar.gz
Added 'It worked' page, in a empty_urlconf() view in views/debug.py. It's called if the URLconf is empty.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@1565 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/views')
-rw-r--r--django/views/debug.py124
1 files changed, 88 insertions, 36 deletions
diff --git a/django/views/debug.py b/django/views/debug.py
index 8909c1f64f..256f7cd662 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -51,9 +51,20 @@ def get_template_exception_info(exc_type, exc_value, tb):
exc_info = hasattr(exc_value, 'exc_info') and exc_value.exc_info or (exc_type, exc_value, tb)
return exc_info + (template_info,)
+def get_safe_settings():
+ "Returns a dictionary of the settings module, with sensitive settings blurred out."
+ settings_dict = {}
+ for k in dir(settings):
+ if k.isupper():
+ if HIDDEN_SETTINGS.search(k):
+ settings_dict[k] = '********************'
+ else:
+ settings_dict[k] = getattr(settings, k)
+ return settings_dict
+
def technical_500_response(request, exc_type, exc_value, tb):
"""
- Create a technical server error response. The last three arguments are
+ Create a technical server error response. The last three arguments are
the values returned from sys.exc_info() and friends.
"""
template_info = None
@@ -98,16 +109,6 @@ def technical_500_response(request, exc_type, exc_value, tb):
})
tb = tb.tb_next
- # Turn the settings module into a dict, filtering out anything that
- # matches HIDDEN_SETTINGS along the way.
- settings_dict = {}
- for k in dir(settings):
- if k.isupper():
- if HIDDEN_SETTINGS.search(k):
- settings_dict[k] = '********************'
- else:
- settings_dict[k] = getattr(settings, k)
-
t = Template(TECHNICAL_500_TEMPLATE)
c = Context({
'exception_type': exc_type.__name__,
@@ -116,7 +117,7 @@ def technical_500_response(request, exc_type, exc_value, tb):
'lastframe': frames[-1],
'request': request,
'request_protocol': os.environ.get("HTTPS") == "on" and "https" or "http",
- 'settings': settings_dict,
+ 'settings': get_safe_settings(),
'template_info': template_info,
'template_does_not_exist': template_does_not_exist,
'loader_debug_info': loader_debug_info,
@@ -124,11 +125,7 @@ def technical_500_response(request, exc_type, exc_value, tb):
return HttpResponseServerError(t.render(c), mimetype='text/html')
def technical_404_response(request, exception):
- """
- Create a technical 404 error response. The exception should be the Http404
- exception.
- """
- urlconf_is_empty = False
+ "Create a technical 404 error response. The exception should be the Http404."
try:
tried = exception.args[0]['tried']
except (IndexError, TypeError):
@@ -136,17 +133,24 @@ def technical_404_response(request, exception):
else:
if not tried:
# tried exists but is an empty list. The URLconf must've been empty.
- urlconf_is_empty = True
+ return empty_urlconf(request)
t = Template(TECHNICAL_404_TEMPLATE)
c = Context({
'root_urlconf': settings.ROOT_URLCONF,
'urlpatterns': tried,
- 'urlconf_is_empty': urlconf_is_empty,
'reason': str(exception),
'request': request,
'request_protocol': os.environ.get("HTTPS") == "on" and "https" or "http",
- 'settings': dict([(k, getattr(settings, k)) for k in dir(settings) if k.isupper()]),
+ 'settings': get_safe_settings(),
+ })
+ return HttpResponseNotFound(t.render(c), mimetype='text/html')
+
+def empty_urlconf(request):
+ "Create an empty URLconf 404 error response."
+ t = Template(EMPTY_URLCONF_TEMPLATE)
+ c = Context({
+ 'project_name': settings.SETTINGS_MODULE.split('.')[0]
})
return HttpResponseNotFound(t.render(c), mimetype='text/html')
@@ -539,23 +543,19 @@ TECHNICAL_404_TEMPLATE = """
</table>
</div>
<div id="info">
- {% if urlconf_is_empty %}
- <p>Your URLconf, <code>{{ settings.ROOT_URLCONF }}</code>, was empty.</p>
+ {% if urlpatterns %}
+ <p>
+ Using the URLconf defined in <code>{{ settings.ROOT_URLCONF }}</code>,
+ Django tried these URL patterns, in this order:
+ </p>
+ <ol>
+ {% for pattern in urlpatterns %}
+ <li>{{ pattern|escape }}</li>
+ {% endfor %}
+ </ol>
+ <p>The current URL, <code>{{ request.path }}</code>, didn't match any of these.</p>
{% else %}
- {% if urlpatterns %}
- <p>
- Using the URLconf defined in <code>{{ settings.ROOT_URLCONF }}</code>,
- Django tried these URL patterns, in this order:
- </p>
- <ol>
- {% for pattern in urlpatterns %}
- <li>{{ pattern|escape }}</li>
- {% endfor %}
- </ol>
- <p>The current URL, <code>{{ request.path }}</code>, didn't match any of these.</p>
- {% else %}
- <p>{{ reason|escape }}</p>
- {% endif %}
+ <p>{{ reason|escape }}</p>
{% endif %}
</div>
@@ -569,3 +569,55 @@ TECHNICAL_404_TEMPLATE = """
</body>
</html>
"""
+
+EMPTY_URLCONF_TEMPLATE = """
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en"><head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title>
+ <style type="text/css">
+ html * { padding:0; margin:0; }
+ body * { padding:10px 20px; }
+ body * * { padding:0; }
+ body { font:small sans-serif; }
+ body>div { border-bottom:1px solid #ddd; }
+ h1 { font-weight:normal; }
+ h2 { margin-bottom:.8em; }
+ h2 span { font-size:80%; color:#666; font-weight:normal; }
+ h3 { margin:1em 0 .5em 0; }
+ h4 { margin:0 0 .5em 0; font-weight: normal; }
+ table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
+ tbody td, tbody th { vertical-align:top; padding:2px 3px; }
+ thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }
+ tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
+ ul { margin-left: 2em; margin-top: 1em; }
+ #summary { background: #e0ebff; }
+ #summary h2 { font-weight: normal; color: #666; }
+ #explanation { background:#eee; }
+ #instructions { background:#f6f6f6; }
+ #summary table { border:none; background:transparent; }
+ </style>
+</head>
+
+<body>
+<div id="summary">
+ <h1>It worked!</h1>
+ <h2>Congratulations on your first Django-powered page.</h2>
+</div>
+
+<div id="instructions">
+ <p>Of course, you haven't actually done any work yet. Here's what to do next:</p>
+ <ul>
+ <li>Edit the <code>DATABASE_*</code> settings in <code>{{ project_name }}/settings.py</code>.</li>
+ <li>Start your first app by running <code>{{ project_name }}/manage.py startapp [appname]</code>.</li>
+ </ul>
+</div>
+
+<div id="explanation">
+ <p>
+ You're seeing this message because you have <code>DEBUG = True</code> in your
+ Django settings file and you haven't configured any URLs. Get to work!
+ </p>
+</div>
+</body></html>
+"""