Skip to content

Commit

Permalink
Don't inherit from base.html in 500 error page
Browse files Browse the repository at this point in the history
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
  • Loading branch information
spearki committed Nov 21, 2012
1 parent 6994698 commit 76ef256
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 24 deletions.
6 changes: 6 additions & 0 deletions horizon/templatetags/horizon.py
Expand Up @@ -21,6 +21,7 @@
from django.utils.translation import ugettext as _

from horizon.base import Horizon
from horizon import conf


register = template.Library()
Expand Down Expand Up @@ -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
103 changes: 79 additions & 24 deletions openstack_dashboard/templates/500.html
@@ -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>
7 changes: 7 additions & 0 deletions openstack_dashboard/test/error_pages_urls.py
@@ -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')
)
34 changes: 34 additions & 0 deletions openstack_dashboard/test/tests/error_pages.py
@@ -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)
5 changes: 5 additions & 0 deletions openstack_dashboard/urls.py
Expand Up @@ -43,3 +43,8 @@
# 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')
)

0 comments on commit 76ef256

Please sign in to comment.