X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/1c81f61d4e574d439ed2dbfefd599f04b5e2bef9..dbb5ab771be406d90ac522e0ecd644e5ddb21e6f:/views.py diff --git a/views.py b/views.py index 255e54e..cec9c57 100644 --- a/views.py +++ b/views.py @@ -1,5 +1,6 @@ from django.conf import settings -from django.http import Http404 +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 @@ -15,6 +16,30 @@ def node_view(request, path=None, **kwargs): node = request.node subpath = request.node.subpath - if subpath and not node.accepts_subpath: - raise Http404 + if not node.handles_subpath(subpath): + # If the subpath isn't handled, check settings.APPEND_SLASH. If + # it's True, try to correct the subpath. + if not settings.APPEND_SLASH: + raise Http404 + + if subpath[-1] == "/": + subpath = subpath[:-1] + else: + subpath += "/" + + redirect_url = node.construct_url(subpath) + + if node.handles_subpath(subpath): + return HttpResponseRedirect(redirect_url) + + # Perhaps there is a non-philo view at this address. Can we + # resolve *something* there besides node_view? If not, + # raise a 404. + view, args, kwargs = resolve(redirect_url) + + if view == node_view: + raise Http404 + else: + return HttpResponseRedirect(redirect_url) + return node.render_to_response(request, kwargs) \ No newline at end of file