MultiViews now clear_url_caches before resolving URLs, needed to allow them to change...
[philo.git] / models / nodes.py
index 1e7622a..4fa4935 100644 (file)
@@ -4,11 +4,13 @@ from django.contrib.contenttypes import generic
 from django.contrib.sites.models import Site
 from django.http import HttpResponse, HttpResponseServerError, HttpResponseRedirect
 from django.core.servers.basehttp import FileWrapper
 from django.contrib.sites.models import Site
 from django.http import HttpResponse, HttpResponseServerError, HttpResponseRedirect
 from django.core.servers.basehttp import FileWrapper
-from django.core.urlresolvers import resolve
+from django.core.urlresolvers import resolve, clear_url_caches
+from django.template import add_to_builtins as register_templatetags
 from inspect import getargspec
 from philo.models.base import TreeEntity, Entity, QuerySetMapper
 from philo.utils import ContentTypeSubclassLimiter
 from philo.validators import RedirectValidator
 from inspect import getargspec
 from philo.models.base import TreeEntity, Entity, QuerySetMapper
 from philo.utils import ContentTypeSubclassLimiter
 from philo.validators import RedirectValidator
+from philo.exceptions import ViewDoesNotProvideSubpaths
 
 
 _view_content_type_limiter = ContentTypeSubclassLimiter(None)
 
 
 _view_content_type_limiter = ContentTypeSubclassLimiter(None)
@@ -21,7 +23,9 @@ class Node(TreeEntity):
        
        @property
        def accepts_subpath(self):
        
        @property
        def accepts_subpath(self):
-               return self.view.accepts_subpath
+               if self.view:
+                       return self.view.accepts_subpath
+               return False
        
        def render_to_response(self, request, path=None, subpath=None, extra_context=None):
                return self.view.render_to_response(self, request, path, subpath, extra_context)
        
        def render_to_response(self, request, path=None, subpath=None, extra_context=None):
                return self.view.render_to_response(self, request, path, subpath, extra_context)
@@ -39,6 +43,9 @@ class View(Entity):
        
        accepts_subpath = False
        
        
        accepts_subpath = False
        
+       def get_subpath(self, obj):
+               raise ViewDoesNotProvideSubpaths
+       
        def attributes_with_node(self, node):
                return QuerySetMapper(self.attribute_set, passthrough=node.attributes)
        
        def attributes_with_node(self, node):
                return QuerySetMapper(self.attribute_set, passthrough=node.attributes)
        
@@ -61,6 +68,7 @@ class MultiView(View):
        urlpatterns = []
        
        def render_to_response(self, node, request, path=None, subpath=None, extra_context=None):
        urlpatterns = []
        
        def render_to_response(self, node, request, path=None, subpath=None, extra_context=None):
+               clear_url_caches()
                if not subpath:
                        subpath = ""
                subpath = "/" + subpath
                if not subpath:
                        subpath = ""
                subpath = "/" + subpath
@@ -111,4 +119,7 @@ class File(View):
                app_label = 'philo'
        
        def __unicode__(self):
                app_label = 'philo'
        
        def __unicode__(self):
-               return self.file.name
\ No newline at end of file
+               return self.file.name
+
+
+register_templatetags('philo.templatetags.nodes')
\ No newline at end of file