qmsk/pages/views.py
changeset 233 f5227f26231b
parent 229 3d483fa09c8d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/pages/views.py	Sat Oct 04 13:32:59 2014 +0300
@@ -0,0 +1,55 @@
+from django import http
+from django.shortcuts import render, redirect
+
+from qmsk.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, 'qmsk.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 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)
+    
+    try:
+        return render(request, 'qmsk.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,
+        )