diff --git a/horizon/templatetags/horizon.py b/horizon/templatetags/horizon.py index 13169d414e6..ad1c317dd4f 100644 --- a/horizon/templatetags/horizon.py +++ b/horizon/templatetags/horizon.py @@ -21,6 +21,7 @@ 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 diff --git a/openstack_dashboard/templates/500.html b/openstack_dashboard/templates/500.html index d4d6747f59c..fb51211cf0c 100644 --- a/openstack_dashboard/templates/500.html +++ b/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 %} -
- -{% endblock %} - -{% block sidebar %} - -{% endblock %} + {% endblock %} + {% block footer %}{% endblock %} + {% block js %}{% endblock %} + + diff --git a/openstack_dashboard/test/error_pages_urls.py b/openstack_dashboard/test/error_pages_urls.py new file mode 100644 index 00000000000..cc28840bdc6 --- /dev/null +++ b/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') +) diff --git a/openstack_dashboard/test/tests/error_pages.py b/openstack_dashboard/test/tests/error_pages.py new file mode 100644 index 00000000000..44cb8da5a3a --- /dev/null +++ b/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) diff --git a/openstack_dashboard/urls.py b/openstack_dashboard/urls.py index 2865902d6d5..64ef60530a0 100644 --- a/openstack_dashboard/urls.py +++ b/openstack_dashboard/urls.py @@ -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') + )