Added philo 404 handling via a relationship named Http404 on nodes. Uses the passthro...
[philo.git] / views.py
1 from django.http import Http404, HttpResponse
2 from django.template import RequestContext
3 from django.contrib.sites.models import Site
4 from philo.models import Node
5
6
7 def node_view(request, path=None, **kwargs):
8         node = None
9         subpath = None
10         if path is None:
11                 path = '/'
12         current_site = Site.objects.get_current()
13         try:
14                 node, subpath = Node.objects.get_with_path(path, root=current_site.root_node, absolute_result=False)
15         except Node.DoesNotExist:
16                 raise Http404
17         if not node:
18                 raise Http404
19         try:
20                 if subpath and not node.accepts_subpath:
21                         raise Http404
22                 return node.render_to_response(request, path=path, subpath=subpath)
23         except Http404, e:
24                 try:
25                         Http404View = node.relationships['Http404']
26                 except KeyError:
27                         Http404View = None
28                 
29                 if not Http404View:
30                         raise e
31                 
32                 return Http404View.render_to_response(node, request, path, subpath)