Merge branch 'master' of git://github.com/melinath/philo
[philo.git] / views.py
1 from django.contrib.sites.models import Site
2 from django.conf import settings
3 from django.http import Http404, HttpResponse
4 from django.template import RequestContext
5 from django.views.decorators.vary import vary_on_headers
6 from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED
7 from philo.models import Node
8
9
10 @vary_on_headers('Accept')
11 def node_view(request, path=None, **kwargs):
12         if not hasattr(request, 'node'):
13                 raise MIDDLEWARE_NOT_CONFIGURED
14         
15         if not request.node:
16                 raise Http404
17         
18         node = request.node
19         subpath = request.node.subpath
20         
21         try:
22                 if subpath and not node.accepts_subpath:
23                         raise Http404
24                 return node.render_to_response(request, kwargs)
25         except Http404, e:
26                 if settings.DEBUG:
27                         raise
28                 
29                 try:
30                         Http404View = node.attributes['Http404']
31                 except KeyError:
32                         Http404View = None
33                 
34                 if not Http404View:
35                         raise e
36                 
37                 extra_context = {'exception': e}
38                 
39                 return Http404View.render_to_response(request, extra_context)
40         except Exception, e:
41                 if settings.DEBUG:
42                         raise
43                 
44                 try:
45                         Http500View = node.attributes['Http500']
46                         
47                         if not Http500View:
48                                 raise e
49                         
50                         extra_context = {'exception': e}
51                         
52                         return Http500View.render_to_response(request, extra_context)
53                 except:
54                         raise e