Merge 'template_error_handling' bugfix.
authorStephen Burrows <stephen.r.burrows@gmail.com>
Tue, 19 Oct 2010 14:56:15 +0000 (10:56 -0400)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Tue, 19 Oct 2010 15:07:19 +0000 (11:07 -0400)
1  2 
models/pages.py

diff --combined models/pages.py
@@@ -2,6 -2,7 +2,7 @@@
  from django.conf import settings
  from django.contrib.contenttypes.models import ContentType
  from django.contrib.contenttypes import generic
+ from django.core.exceptions import ValidationError
  from django.db import models
  from django.http import HttpResponse
  from django.template import TemplateDoesNotExist, Context, RequestContext, Template as DjangoTemplate, add_to_builtins as register_templatetags
@@@ -82,9 -83,9 +83,9 @@@ class Page(View)
        def render_to_string(self, node=None, request=None, path=None, subpath=None, extra_context=None):
                context = {}
                context.update(extra_context or {})
 -              context.update({'page': self, 'attributes': self.attributes, 'relationships': self.relationships})
 +              context.update({'page': self, 'attributes': self.attributes})
                if node and request:
 -                      context.update({'node': node, 'attributes': self.attributes_with_node(node), 'relationships': self.relationships_with_node(node)})
 +                      context.update({'node': node, 'attributes': self.attributes_with_node(node)})
                        page_about_to_render_to_string.send(sender=self, node=node, request=request, extra_context=context)
                        string = self.template.django_template.render(RequestContext(request, context))
                else:
        def __unicode__(self):
                return self.title
        
+       def clean_fields(self, exclude=None):
+               try:
+                       super(Page, self).clean_fields(exclude)
+               except ValidationError, e:
+                       errors = e.message_dict
+               else:
+                       errors = {}
+               
+               if 'template' not in errors and 'template' not in exclude:
+                       try:
+                               self.template.clean_fields()
+                               self.template.clean()
+                       except ValidationError, e:
+                               errors['template'] = e.messages
+               
+               if errors:
+                       raise ValidationError(errors)
+       
        class Meta:
                app_label = 'philo'