2009-08-18 2 views
4

Мне нравится, как Django выполняет проверку формы. Однако я хочу переопределить способ отображения ошибок. Я хочу отправить ошибки проверки формы на верхнюю часть моей веб-страницы (на конкретный тег div) вместо того, чтобы позволить Django отображать ошибки рядом с полями формы, которые являются недопустимыми. Какие-либо предложения?Как изменить способ отображения сообщений об ошибках Django во время проверки?

ответ

2

Вы можете легко сделать это, просто указав {{ form.errors }} в верхней части шаблона, вместо того, чтобы ставить {{ field.errors }} на каждом уровне поля.

Я подозреваю вас в вашем вопросе, хотя вы просто используете тег {{ form.as_p }} или один из его братьев, чтобы вывести всю форму за один раз. Не делайте этого, если вы хотите настроить отображение вообще. Непросто заменить его простым циклом, чтобы пройти через каждое поле и отобразить его label_tag и само поле, и вы очень сильно выигрываете от повышенного контроля.

+0

Daniel, большое спасибо - это работает. Однако Django все еще показывает свои сообщения об ошибках, т.е. У меня есть моя верхняя часть моей страницы, и Django все еще показывает ошибки рядом с полями, которые являются недопустимыми. Возможно ли теперь сообщить Django о том, чтобы не отображать ошибки проверки (но все равно генерировать form.errors для меня)? – 2009-08-18 14:57:16

+0

Peter есть две вещи: 1) ошибки, связанные с полями {{field.erorrs}} 2) глобальные ошибки, которые не связаны с полями {{form.errors}} Итак, как только вы подтвердите удаление, удалите все поля. и скопировать их в form.errors. Затем все сообщения об ошибках будут отображаться сверху. –

0

Даниил указал вам в правильном направлении. Смотрите документацию здесь:

http://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

«Каждый названный вид поля может быть выведена на основании шаблона с помощью {{form.name резкости}}, который будет производить HTML, необходимый для отображения формы виджета Используя {{form.name-of-field.errors}} отображает список ошибок поля .... "

0

Я предлагаю вам переопределить метод as_XXX вашей формы, в моем случае я переопределяю as_p:

def html_output(self, normal_row, help_text_html): 
    "Helper function for outputting HTML" 
    output = [] 

    for name, field in self.fields.items(): 
     html_class_attr = '' 
     bf = BoundField(self, field, name) 
     if bf.is_hidden: 
      hidden_fields.append(unicode(bf)) 
     else: 
      css_classes = bf.css_classes() 
      if css_classes: 
       html_class_attr = ' class="%s"' % css_classes 

      if bf.label: 
       label = conditional_escape(force_unicode(bf.label)) 
       if self.label_suffix: 
        if label[-1] not in ':?.!': 
         label += self.label_suffix 
       label = bf.label_tag(label) or '' 
      else: 
       label = '' 

      if field.help_text: 
       help_text = help_text_html % force_unicode(field.help_text) 
      else: 
       help_text = u'' 

      output.append(normal_row % { 
       'label': force_unicode(label), 
       'field': unicode(bf), 
       'help_text': help_text, 
       'html_class_attr': html_class_attr 
      }) 
    return mark_safe(u'\n'.join(output)) 

def as_p(self): 
    "Returns this form rendered as HTML <p>s." 
    return self.html_output(
     normal_row = u'<p%(html_class_attr)s>%(label)s %(field)s%(help_text)s</p>', 
     help_text_html = u' <span class="helptext">%s</span>') 

Это немного уродливое. Надеюсь, поможет.

Смежные вопросы