diff --git a/django/contrib/admin/templates/admin/template_validator.html b/django/contrib/admin/templates/admin/template_validator.html index 422e90261f..510614386c 100644 --- a/django/contrib/admin/templates/admin/template_validator.html +++ b/django/contrib/admin/templates/admin/template_validator.html @@ -6,18 +6,18 @@
-{% if form.error_dict %} -

Your template had {{ form.error_dict.items|length }} error{{ form.error_dict.items|pluralize }}:

+{% if form.errors %} +

Your template had {{ form.errors|length }} error{{ form.errors|pluralize }}:

{% endif %}
-
- {% if form.site.errors %}{{ form.site.html_error_list }}{% endif %} -

{{ form.site }}

+
+ {% if form.errors.site %}{{ form.errors.site }}{% endif %} +

{{ form.site }}

-
- {% if form.template.errors %}{{ form.template.html_error_list }}{% endif %} -

{{ form.template }}

+
+ {% if form.errors.template %}{{ form.errors.template }}{% endif %} +

{{ form.template }}

diff --git a/django/contrib/admin/views/template.py b/django/contrib/admin/views/template.py index a3b4538b10..de9320bfc2 100644 --- a/django/contrib/admin/views/template.py +++ b/django/contrib/admin/views/template.py @@ -1,10 +1,11 @@ +from django import template, forms from django.contrib.admin.views.decorators import staff_member_required -from django.core import validators -from django import template, oldforms from django.template import loader from django.shortcuts import render_to_response from django.contrib.sites.models import Site from django.conf import settings +from django.utils.translation import ugettext_lazy as _ + def template_validator(request): """ @@ -16,41 +17,44 @@ def template_validator(request): for mod in settings.ADMIN_FOR: settings_module = __import__(mod, {}, {}, ['']) settings_modules[settings_module.SITE_ID] = settings_module - manipulator = TemplateValidator(settings_modules) - new_data, errors = {}, {} + site_list = Site.objects.in_bulk(settings_modules.keys()).values() if request.POST: - new_data = request.POST.copy() - errors = manipulator.get_validation_errors(new_data) - if not errors: + form = TemplateValidatorForm(settings_modules, site_list, + data=request.POST) + if form.is_valid(): request.user.message_set.create(message='The template is valid.') + else: + form = TemplateValidatorForm(settings_modules, site_list) return render_to_response('admin/template_validator.html', { 'title': 'Template validator', - 'form': oldforms.FormWrapper(manipulator, new_data, errors), + 'form': form, }, context_instance=template.RequestContext(request)) template_validator = staff_member_required(template_validator) -class TemplateValidator(oldforms.Manipulator): - def __init__(self, settings_modules): - self.settings_modules = settings_modules - site_list = Site.objects.in_bulk(settings_modules.keys()).values() - self.fields = ( - oldforms.SelectField('site', is_required=True, choices=[(s.id, s.name) for s in site_list]), - oldforms.LargeTextField('template', is_required=True, rows=25, validator_list=[self.isValidTemplate]), - ) - def isValidTemplate(self, field_data, all_data): - # get the settings module - # if the site isn't set, we don't raise an error since the site field will +class TemplateValidatorForm(forms.Form): + site = forms.ChoiceField(_('site')) + template = forms.CharField( + _('template'), widget=forms.Textarea({'rows': 25, 'cols': 80})) + + def __init__(self, settings_modules, site_list, *args, **kwargs): + self.settings_modules = settings_modules + super(TemplateValidatorForm, self).__init__(*args, **kwargs) + self.fields['site'].choices = [(s.id, s.name) for s in site_list] + + def clean_template(self): + # Get the settings module. If the site isn't set, we don't raise an + # error since the site field will. try: - site_id = int(all_data.get('site', None)) + site_id = int(self.cleaned_data.get('site', None)) except (ValueError, TypeError): return settings_module = self.settings_modules.get(site_id, None) if settings_module is None: return - # so that inheritance works in the site's context, register a new function - # for "extends" that uses the site's TEMPLATE_DIRS instead. + # So that inheritance works in the site's context, register a new + # function for "extends" that uses the site's TEMPLATE_DIRS instead. def new_do_extends(parser, token): node = loader.do_extends(parser, token) node.template_dirs = settings_module.TEMPLATE_DIRS @@ -59,14 +63,15 @@ class TemplateValidator(oldforms.Manipulator): register.tag('extends', new_do_extends) template.builtins.append(register) - # Now validate the template using the new template dirs - # making sure to reset the extends function in any case. + # Now validate the template using the new TEMPLATE_DIRS, making sure to + # reset the extends function in any case. error = None + template_string = self.cleaned_data['template'] try: - tmpl = loader.get_template_from_string(field_data) + tmpl = loader.get_template_from_string(template_string) tmpl.render(template.Context({})) except template.TemplateSyntaxError, e: error = e template.builtins.remove(register) if error: - raise validators.ValidationError, e.args + raise forms.ValidationError, e.args