Corrected node_view redirection of trailing slashes to non-trailing slashes to rely...
authorStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 16 Mar 2011 20:33:47 +0000 (16:33 -0400)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 16 Mar 2011 20:33:47 +0000 (16:33 -0400)
middleware.py
urls.py
views.py

index c0b1e9e..5bcd569 100644 (file)
@@ -24,6 +24,9 @@ class LazyNode(object):
                                node, subpath = Node.objects.get_with_path(path, root=getattr(current_site, 'root_node', None), absolute_result=False)
                        except Node.DoesNotExist:
                                node = None
+                       else:
+                               if subpath and not node.handles_subpath(subpath):
+                                       node = None
                        
                        if node:
                                if subpath is None:
@@ -46,7 +49,10 @@ 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', '/')
+               try:
+                       request._cached_node_path = view_kwargs['path']
+               except KeyError:
+                       pass
        
        def process_exception(self, request, exception):
                if settings.DEBUG or not hasattr(request, 'node') or not request.node:
diff --git a/urls.py b/urls.py
index 47be7da..0363224 100644 (file)
--- a/urls.py
+++ b/urls.py
@@ -3,6 +3,6 @@ from philo.views import node_view
 
 
 urlpatterns = patterns('',
-       url(r'^$', node_view, name='philo-root'),
+       url(r'^$', node_view, kwargs={'path': '/'}, name='philo-root'),
        url(r'^(?P<path>.*)$', node_view, name='philo-node-by-path')
 )
index f5a2c7f..598be36 100644 (file)
--- a/views.py
+++ b/views.py
@@ -28,7 +28,7 @@ def node_view(request, path=None, **kwargs):
        subpath = request.node.subpath
        
        # Explicitly disallow trailing slashes if we are otherwise at a node's url.
-       if request.path and request.path != "/" and request.path[-1] == "/" and subpath == "/":
+       if request._cached_node_path != "/" and request._cached_node_path[-1] == "/" and subpath == "/":
                return HttpResponseRedirect(node.get_absolute_url())
        
        if not node.handles_subpath(subpath):