X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/d19e216035b14d8f60b24dda0c0670e6997f16ce..c5586d632dc2cf5b06af929b2cb38131042c0ed6:/philo/views.py diff --git a/philo/views.py b/philo/views.py index 598be36..2c2a952 100644 --- a/philo/views.py +++ b/philo/views.py @@ -2,11 +2,23 @@ from django.conf import settings from django.core.urlresolvers import resolve from django.http import Http404, HttpResponseRedirect from django.views.decorators.vary import vary_on_headers + from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED @vary_on_headers('Accept') def node_view(request, path=None, **kwargs): + """ + :func:`node_view` handles incoming requests by checking to make sure that: + + - the request has an attached :class:`.Node`. + - the attached :class:`~philo.models.nodes.Node` handles any remaining path beyond its location. + + If these conditions are not met, then :func:`node_view` will either raise :exc:`Http404` or, if it seems like the address was mistyped (for example missing a trailing slash), return an :class:`HttpResponseRedirect` to the correct address. + + Otherwise, :func:`node_view` will call the :class:`.Node`'s :meth:`~.Node.render_to_response` method, passing ``kwargs`` in as the ``extra_context``. + + """ if "philo.middleware.RequestNodeMiddleware" not in settings.MIDDLEWARE_CLASSES: raise MIDDLEWARE_NOT_CONFIGURED @@ -25,10 +37,10 @@ def node_view(request, path=None, **kwargs): raise Http404 node = request.node - subpath = request.node.subpath + subpath = request.node._subpath # Explicitly disallow trailing slashes if we are otherwise at a node's url. - if request._cached_node_path != "/" and request._cached_node_path[-1] == "/" and subpath == "/": + if node._path != "/" and node._path[-1] == "/" and subpath == "/": return HttpResponseRedirect(node.get_absolute_url()) if not node.handles_subpath(subpath):