X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/3b366a97268ee50421047f5e147aef8a8c4fc984..834e27b62ba09014f91feabe89da08adb472ce9e:/middleware.py?ds=sidebyside diff --git a/middleware.py b/middleware.py index 8c208e4..c0b1e9e 100644 --- a/middleware.py +++ b/middleware.py @@ -1,5 +1,7 @@ +from django.conf import settings from django.contrib.sites.models import Site -from philo.models import Node +from django.http import Http404 +from philo.models import Node, View class LazyNode(object): @@ -13,12 +15,24 @@ class LazyNode(object): except Site.DoesNotExist: current_site = None + path = request._cached_node_path + trailing_slash = False + if path[-1] == '/': + trailing_slash = True + try: - node, subpath = Node.objects.get_with_path(request._cached_node_path, root=getattr(current_site, 'root_node', None), absolute_result=False) + node, subpath = Node.objects.get_with_path(path, root=getattr(current_site, 'root_node', None), absolute_result=False) except Node.DoesNotExist: node = None if node: + if subpath is None: + subpath = "" + subpath = "/" + subpath + + if trailing_slash and subpath[-1] != "/": + subpath += "/" + node.subpath = subpath request._found_node = node @@ -32,4 +46,20 @@ class RequestNodeMiddleware(object): request.__class__.node = LazyNode() def process_view(self, request, view_func, view_args, view_kwargs): - request._cached_node_path = view_kwargs.get('path', '/') \ No newline at end of file + request._cached_node_path = view_kwargs.get('path', '/') + + def process_exception(self, request, exception): + if settings.DEBUG or not hasattr(request, 'node') or not request.node: + return + + if isinstance(exception, Http404): + error_view = request.node.attributes.get('Http404', None) + else: + error_view = request.node.attributes.get('Http500', None) + + if error_view is None or not isinstance(error_view, View): + # Should this be duck-typing? Perhaps even no testing? + return + + extra_context = {'exception': exception} + return error_view.render_to_response(request, extra_context) \ No newline at end of file