Tweaked nodeview error reraising to preserve traceback information.
[philo.git] / views.py
index 5e4c9c9..b3e2a74 100644 (file)
--- 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
+               
                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
+               
+               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