# HG changeset patch # User Tero Marttila # Date 1410694047 -10800 # Node ID 3d483fa09c8dd5e0c6943351e8419fa2460089ad # Parent 5b43febfe4842b8c0b071ad6b8984323313d268c qmsk_www_pages: page_error diff -r 5b43febfe484 -r 3d483fa09c8d qmsk_www_pages/templates/pages/error.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmsk_www_pages/templates/pages/error.html Sun Sep 14 14:27:27 2014 +0300 @@ -0,0 +1,41 @@ +{% extends "site.html" %} + +{% block title %}{{ site_name }} :: {{ error_title }}{%endblock %} + +{% block header %} +

+ {{ site_name }} +

+{% endblock %} + +{% block nav %} +{% for tree, tree_name in page_hierarchy %} + {% if not forloop.first %} +
+ {% endif %} + +{% endfor %} +{% endblock %} + +{% block content %} +

{{ error_title }}

+ +{% endblock %} diff -r 5b43febfe484 -r 3d483fa09c8d qmsk_www_pages/views.py --- a/qmsk_www_pages/views.py Sun Sep 14 14:27:08 2014 +0300 +++ b/qmsk_www_pages/views.py Sun Sep 14 14:27:27 2014 +0300 @@ -1,26 +1,55 @@ -from django.http import Http404 +from django import http from django.shortcuts import render, redirect from qmsk_www_pages import pages +def page_error (request, page, status, title, error_message=None, error_exception=None): + site = pages.SITE + + if page: + page_hierarchy = list(page.hierarchy()) + else: + tree = site.tree() + page_hierarchy = [(tree, None)] + + return render(request, 'pages/error.html', dict( + site_name = site.name, + page_hierarchy = page_hierarchy, + error_page = page, + error_title = title, + error_message = error_message, + error_output = str(error_exception) if error_exception else None, + ), status=status) + # Create your views here. def page (request, page): try: page = pages.page(page) - except pages.NotFound: - raise Http404 + except pages.NotFound as error: + return page_error(request, None, + status = 404, + title = u"Not Found", + error_message = page, + ) redirect_page = page.redirect_page(request) if redirect_page: return redirect('page', redirect_page) - - return render(request, 'pages/page.html', dict( - site_name = page.tree.site.name, - page_name = page.name, - page_title = page.title, - page_breadcrumb = page.breadcrumb(), - page_hierarchy = list(page.hierarchy()), - page_html = page.render_html(request), - page_modified = page.modified(), - )) + + try: + return render(request, 'pages/page.html', dict( + site_name = page.tree.site.name, + page_name = page.name, + page_title = page.title, + page_breadcrumb = page.breadcrumb(), + page_hierarchy = list(page.hierarchy()), + page_html = page.render_html(request), + page_modified = page.modified(), + )) + except pages.RenderError as error: + return page_error(request, page, + status = 500, + title = u"Server Error: {page}".format(page=page.url()), + error_exception = error, + )