from django.http import Http404, HttpResponse
from django.template import RequestContext
from django.views.decorators.vary import vary_on_headers
+from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED
from philo.models import Node
@vary_on_headers('Accept')
def node_view(request, path=None, **kwargs):
- node = None
- subpath = None
- if path is None:
- path = '/'
- current_site = Site.objects.get_current()
- try:
- node, subpath = Node.objects.get_with_path(path, root=current_site.root_node, absolute_result=False)
- except Node.DoesNotExist:
- raise Http404
+ if not hasattr(request, 'node'):
+ raise MIDDLEWARE_NOT_CONFIGURED
- if not node:
+ if not request.node:
raise Http404
+ node = request.node
+ subpath = request.node.subpath
+
try:
if subpath and not node.accepts_subpath:
raise Http404
- return node.render_to_response(request, path=path, subpath=subpath)
+ return node.render_to_response(request, kwargs)
except Http404, e:
if settings.DEBUG:
- raise e
+ raise
try:
- Http404View = node.relationships['Http404']
+ Http404View = node.attributes['Http404']
except KeyError:
Http404View = None
extra_context = {'exception': e}
- return Http404View.render_to_response(node, request, path, subpath, extra_context)
+ return Http404View.render_to_response(request, extra_context)
except Exception, e:
if settings.DEBUG:
- raise e
+ raise
try:
- Http500View = node.relationships['Http500']
+ Http500View = node.attributes['Http500']
if not Http500View:
raise e
extra_context = {'exception': e}
- return Http500View.render_to_response(node, request, path, subpath, extra_context)
+ return Http500View.render_to_response(request, extra_context)
except:
raise e
\ No newline at end of file