Don't inherit from base.html in 500 error page

For server errors, the context passed to the template is empty,
so things like STATIC_URL and context processors don't work.

Fixes bug 1067206.

Change-Id: Ia1801afaecd6a23fbcc6054552d0fd313597d1c1
This commit is contained in:
Kieran Spear 2012-11-14 18:30:39 +11:00
parent 699469827b
commit 76ef256dc4
5 changed files with 131 additions and 24 deletions

View File

@ -21,6 +21,7 @@ from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext as _
from horizon.base import Horizon
from horizon import conf
register = template.Library()
@ -135,3 +136,8 @@ def jstemplate(parser, token):
nodelist = parser.parse(('endjstemplate',))
parser.delete_first_token()
return JSTemplateNode(nodelist)
@register.assignment_tag
def load_config():
return conf.HORIZON_CONFIG

View File

@ -1,27 +1,82 @@
{% extends "base.html" %}
{% load i18n %}
{% load branding i18n staticfiles %}
{% load load_config from horizon %}
{% block title %} - {% trans "Internal Server Error" %}{% endblock %}
{% load_config as HORIZON_CONFIG %}
{% block content %}
<div id="right_content">
<div id="page_head">
<h2 id="page_heading">{% trans "Internal Server Error" %}</h2>
<p id="page_description">{% trans "An unexpected error occurred while processing your request. Please try your request again." %}</p>
{% comment %}
NB: The context for 500 pages is an empty dict.
Don't add any content here that depends on things from
the context.
{% endcomment %}
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
<link rel="shortcut icon" href="{% static "dashboard/img/favicon.ico" %}"/>
<title>{% trans "Server error" %} - {% site_branding %}</title>
{% block css %}
<style>
a {
color: #43a1d6;
text-decoration: none;
}
body {
color: rgb(106, 106, 106);
text-align: center;
font-weight: normal;
background: none repeat scroll 0% 0% rgb(250, 250, 250);
}
div#container {
position: absolute;
top: 80px;
padding-top: 170px;
margin: 0px 0px 0px -196px;
left: 50%;
width: 390px;
background: url("{% static "dashboard/img/logo.png" %}") no-repeat scroll center 35px padding-box rgb(255, 255, 255);
border: 1px solid rgb(225, 225, 225);
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
}
h2 {
font-weight: normal;
}
div#container > div {
padding: 25px;
}
</style>
{% endblock %}
</head>
<body id="{% block body_id %}{% endblock %}">
{% block page_header %}{% endblock %}
{% block content %}
<div id="container">
<div id="text">
{% block text %}
<h2>{% trans "Something went wrong!" %}</h2>
<p>{% trans "An unexpected error has occurred. Try refreshing the page. If that doesn't help, contact your local administrator." %}</p>
{% endblock %}
</div>
<div id="links">
{% block links %}
<p><a href="/">{% trans "Home" %}</a></p>
<p><a href="{{ HORIZON_CONFIG.help_url }}">{% trans "Help" %}</a></p>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
{% block sidebar %}
<div id="sidebar">
<ul id="navigation">
{% block nav_home %}
<li><h3><a href="{% url index %}">{% trans "Home" %}</a></h3></li>
{% endblock %}
{% block nav_projects %}
<li><h3><a href="{% url index %}">{% trans "Projects" %}</a></h3></li>
{% endblock %}
</ul>
</div> <!-- end sidebar -->
{% endblock %}
{% endblock %}
{% block footer %}{% endblock %}
{% block js %}{% endblock %}
</body>
</html>

View File

@ -0,0 +1,7 @@
from django.conf.urls import patterns, url, include
from openstack_dashboard.urls import urlpatterns
urlpatterns += patterns('',
(r'^500/$', 'django.views.defaults.server_error')
)

View File

@ -0,0 +1,34 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2012 OpenStack, LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from os import path
from django.conf import settings
from horizon import exceptions
from openstack_dashboard.test import helpers as test
class ErrorPageTests(test.TestCase):
""" Tests for error pages """
urls = 'openstack_dashboard.test.error_pages_urls'
def test_500_error(self):
TEMPLATE_DIRS = (path.join(settings.ROOT_PATH, 'templates'),)
with self.settings(TEMPLATE_DIRS=TEMPLATE_DIRS):
response = self.client.get('/500/')
self.assertTrue('Server error' in response.content)

View File

@ -43,3 +43,8 @@ urlpatterns += staticfiles_urlpatterns()
# development. Only active if DEBUG==True and the URL prefix is a local
# path. Production media should NOT be served by Django.
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^500/$', 'django.views.defaults.server_error')
)