-def validate_template(template):
- """
- Makes sure that the template and all included or extended templates are valid.
- """
- for node in template.nodelist:
- try:
- if isinstance(node, loader_tags.ExtendsNode):
- extended_template = node.get_parent(Context())
- validate_template(extended_template)
- elif isinstance(node, loader_tags.IncludeNode):
- included_template = loader.get_template(node.template_name.resolve(Context()))
- validate_template(extended_template)
- except Exception, e:
- raise ValidationError("Template code invalid. Error was: %s: %s" % (e.__class__.__name__, e))
-
-
-class TemplateForm(ModelForm):
- def clean_code(self):
- code = self.cleaned_data['code']
- try:
- t = DjangoTemplate(code)
- except Exception, e:
- raise ValidationError("Template code invalid. Error was: %s: %s" % (e.__class__.__name__, e))
+class AttributeForm(ModelForm):
+ def __init__(self, *args, **kwargs):
+ super(AttributeForm, self).__init__(*args, **kwargs)
+ if self.instance.value is not None:
+ value_field = self.instance.value.value_formfield()
+ if value_field:
+ self.fields['value'] = value_field
+ if hasattr(self.instance.value, 'content_type'):
+ self.fields['content_type'] = self.instance.value._meta.get_field('content_type').formfield(initial=getattr(self.instance.value.content_type, 'pk', None))
+
+ def save(self, *args, **kwargs):
+ instance = super(AttributeForm, self).save(*args, **kwargs)
+
+ if self.cleaned_data['value_content_type'] != self.instance.value_content_type:
+ if self.instance.value is not None:
+ self.instance.value.delete()
+ del(self.cleaned_data['value'])
+ elif 'content_type' in self.cleaned_data and self.cleaned_data['content_type'] != self.instance.value.content_type:
+ self.instance.value.content_type = self.cleaned_data['content_type']
+ self.instance.value.save()
+ elif 'value' in self.cleaned_data:
+ self.instance.set_value(self.cleaned_data['value'])
+
+ return instance
+
+ class Meta:
+ model = Attribute
+
+
+class ContainerForm(ModelForm):
+ def __init__(self, *args, **kwargs):
+ super(ContainerForm, self).__init__(*args, **kwargs)
+ self.verbose_name = self.instance.name.replace('_', ' ')
+
+
+class ContentletForm(ContainerForm):
+ content = forms.CharField(required=False, widget=AdminTextareaWidget, label='Content')
+
+ def should_delete(self):
+ return not bool(self.cleaned_data['content'])
+
+ class Meta:
+ model = Contentlet
+ fields = ['name', 'content']