--- /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 %}
+ <h1 class="page-header-title">
+ <a href="{% url 'page' '' %}">{{ site_name }}</a>
+ </h1>
+{% endblock %}
+
+{% block nav %}
+{% for tree, tree_name in page_hierarchy %}
+ {% if not forloop.first %}
+ <hr />
+ {% endif %}
+ <ul class="nav">
+ {% for name, page, type, title in tree.list_sorted %}
+ <li class="page-tree-item{% if type %} page-tree-{{type}}{% else %} page-tree-tree{% endif %}{% if name == tree_name %} page-tree-active{% endif %}">
+ <a href="{% url 'page' page %}">
+ {% if not type %}
+ <i class="glyphicon glyphicon-chevron-right"></i>
+ {% endif %}
+ {{ title }}
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+{% endfor %}
+{% endblock %}
+
+{% block content %}
+ <h1>{{ error_title }}</h1>
+ <div class="alert alert-warning" role="alert">
+ {% if error_message %}
+ {{ error_message }}
+ {% endif %}
+ {% if error_output %}
+ <pre>{{ error_output }}</pre>
+ {% endif %}
+ </div>
+{% endblock %}
--- 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,
+ )