From ff25ab28d66f0d6dcd7371d76da1573bf21d5439 Mon Sep 17 00:00:00 2001 From: Stephen Burrows Date: Fri, 10 Sep 2010 13:14:21 -0400 Subject: [PATCH] Added 500 handling to nodeview. Made nodeview vary on Accept header to allow fancy json/html switchouts - possibly also other fanciness. --- views.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/views.py b/views.py index 5e4c9c9..ab4c216 100644 --- a/views.py +++ b/views.py @@ -1,9 +1,12 @@ +from django.contrib.sites.models import Site +from django.conf import settings from django.http import Http404, HttpResponse from django.template import RequestContext -from django.contrib.sites.models import Site +from django.views.decorators.vary import vary_on_headers from philo.models import Node +@vary_on_headers('Accept') def node_view(request, path=None, **kwargs): node = None subpath = None @@ -14,13 +17,18 @@ def node_view(request, path=None, **kwargs): node, subpath = Node.objects.get_with_path(path, root=current_site.root_node, absolute_result=False) except Node.DoesNotExist: raise Http404 + if not node: raise Http404 + try: if subpath and not node.accepts_subpath: raise Http404 return node.render_to_response(request, path=path, subpath=subpath) except Http404, e: + if settings.DEBUG: + raise e + try: Http404View = node.relationships['Http404'] except KeyError: @@ -29,4 +37,21 @@ def node_view(request, path=None, **kwargs): if not Http404View: raise e - return Http404View.render_to_response(node, request, path, subpath) \ No newline at end of file + extra_context = {'exception': e} + + return Http404View.render_to_response(node, request, path, subpath, extra_context) + except Exception, e: + if settings.DEBUG: + raise e + + try: + Http500View = node.relationships['Http500'] + + if not Http500View: + raise e + + extra_context = {'exception': e} + + return Http500View.render_to_response(node, request, path, subpath, extra_context) + except: + raise e \ No newline at end of file -- 2.20.1