-class TemplateField(models.TextField):
- def validate(self, value, model_instance):
- """For value (a template), make sure that all included templates exist."""
- super(TemplateField, self).validate(value, model_instance)
- try:
- self.validate_template(self.to_template(value))
- except Exception, e:
- raise ValidationError("Template code invalid. Error was: %s: %s" % (e.__class__.__name__, e))
-
- def validate_template(self, template):
- for node in template.nodelist:
- if isinstance(node, loader_tags.ExtendsNode):
- extended_template = node.get_parent(Context())
- self.validate_template(extended_template)
- elif isinstance(node, loader_tags.IncludeNode):
- included_template = loader.get_template(node.template_name.resolve(Context()))
- self.validate_template(extended_template)
-
- def to_template(self, value):
- return Template(value)
-
-