X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/0d51e8dc2b15ca84b8979b94a3224b4a33f7f25e..2c9037d33f3e9d8d0ff6f7389fcfd68ca11258ed:/views.py?ds=inline diff --git a/views.py b/views.py index 65acb52..7aac917 100644 --- a/views.py +++ b/views.py @@ -1,18 +1,54 @@ +from django.contrib.sites.models import Site +from django.conf import settings from django.http import Http404, HttpResponse from django.template import RequestContext -from django.contrib.sites.models import Site -from models import Page +from django.views.decorators.vary import vary_on_headers +from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED +from philo.models import Node -def page_view(request, path=None, **kwargs): - page = None - if path is None: - path = '/' - try: - current_site = Site.objects.get_current() - if current_site: - page = Page.objects.get_with_path(path, root=current_site.root_page) - except Page.DoesNotExist: - raise Http404 - if not page: + +@vary_on_headers('Accept') +def node_view(request, path=None, **kwargs): + if not hasattr(request, 'node'): + raise MIDDLEWARE_NOT_CONFIGURED + + if not request.node: raise Http404 - return HttpResponse(page.template.django_template.render(RequestContext(request, {'page': page})), mimetype=page.template.mimetype) + + node = request.node + subpath = request.node.subpath + + try: + if subpath and not node.accepts_subpath: + raise Http404 + return node.render_to_response(request, kwargs) + except Http404, e: + if settings.DEBUG: + raise + + try: + Http404View = node.attributes['Http404'] + except KeyError: + Http404View = None + + if not Http404View: + raise e + + extra_context = {'exception': e} + + return Http404View.render_to_response(request, extra_context) + except Exception, e: + if settings.DEBUG: + raise + + try: + Http500View = node.attributes['Http500'] + + if not Http500View: + raise e + + extra_context = {'exception': e} + + return Http500View.render_to_response(request, extra_context) + except: + raise e \ No newline at end of file