1 from django.conf import settings
2 from django.core.urlresolvers import resolve
3 from django.http import Http404, HttpResponseRedirect
4 from django.views.decorators.vary import vary_on_headers
5 from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED
8 @vary_on_headers('Accept')
9 def node_view(request, path=None, **kwargs):
10 if "philo.middleware.RequestNodeMiddleware" not in settings.MIDDLEWARE_CLASSES:
11 raise MIDDLEWARE_NOT_CONFIGURED
17 subpath = request.node.subpath
19 if not node.handles_subpath(subpath):
20 # If the subpath isn't handled, check settings.APPEND_SLASH. If
21 # it's True, try to correct the subpath.
22 if not settings.APPEND_SLASH:
25 if subpath[-1] == "/":
26 subpath = subpath[:-1]
30 redirect_url = node.construct_url(subpath)
32 if node.handles_subpath(subpath):
33 return HttpResponseRedirect(redirect_url)
35 # Perhaps there is a non-philo view at this address. Can we
36 # resolve *something* there besides node_view? If not,
38 view, args, kwargs = resolve(redirect_url)
43 return HttpResponseRedirect(redirect_url)
45 return node.render_to_response(request, kwargs)