2016-12-29 2 views
0

У меня возникли ошибки рендеринга в моей форме, когда форма недействительна, она просто перезагружает страницу и ошибки не отображаются. Я хочу, чтобы показать ошибки, как показывает текст, говоря, что электронная почта является недействительным, или что номер телефона содержит недопустимые символыdjango-forms not render errors

Вот мой код:

views.py

def contact(request): 
    form_class = ContactForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST) 

     if form.is_valid(): 
      contact_name = request.POST.get(
       'contact_name' 
       , '') 
      contact_email = request.POST.get(
       'contact_email' 
       , '') 
      contact_phone = request.POST.get(
       'contact_phone' 
       , '') 
      form_content = request.POST.get(
       'content' 
       , '') 

      # Email the profile with the 
      # contact information 
      template = get_template('contact_form.txt') 
      context = Context({ 
       'contact_name': contact_name, 
       'contact_email': contact_email, 
       'contact_phone': contact_phone, 
       'form_content': form_content, 
      }) 
      content = template.render(context) 

      email = EmailMessage(
       "Novo contato pelo site", 
       content, 
       "[email protected]", 
       ['[email protected]'], 
       headers={'Reply-To': contact_email} 
      ) 
      email.send() 

      print(form.cleaned_data) 
     else: 
      print(form) 

    return render(request, 'info/contact_us.html', { 
     'form': form_class, 
    }) 

forms.py

class ContactForm(forms.Form): 
    contact_name = forms.CharField(max_length=150, 
            label="Nome", 
            required=True,) 
    contact_email = forms.EmailField(max_length=150, 
            label="Email", 
            required=True,) 
    contact_phone = forms.RegexField(max_length=12, 
            label="Fone", 
            required=False, 
            regex=r'[0-9]+',) 
    content = forms.CharField(max_length=10000, 
           required=True, 
           widget=forms.Textarea,) 

    def __init__(self, *args, **kwargs): 
     super(ContactForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.form_id = 'id-form' 
     self.helper.form_class = 'blueForms' 
     self.helper.form_method = 'post' 
     self.helper.form_action = '' 

     self.helper.add_input(Submit('submit', 'Submit')) 

     self.fields['contact_name'].label = "Name:" 
     self.fields['contact_email'].label = "Email:" 
     self.fields['contact_phone'].label = "Phone:" 
     self.fields['content'].label = "Message:" 

    def clean(self): 
     cleaned_data = super(ContactForm, self).clean() 
     contact_name = cleaned_data.get("contact_name") 
     contact_email = cleaned_data.get("contact_email") 
     contact_phone = cleaned_data.get("contact_phone") 
     content = cleaned_data.get("content") 

     if 'asd' not in contact_email: 
      raise forms.ValidationError("Invalid Email") 

contact_us.html

<div id="form" class="col-sm-6"> 
    {% crispy form form.helper %} 
</div> 
+0

Где остальная часть этой точки зрения? В настоящее время вы получите ошибку сервера с этим кодом. –

+0

К сожалению, только что добавила последнюю часть, которую я забыл. –

ответ

1

Ошибка на этой линии

return render(request, 'info/contact_us.html', { 
    'form': form_class, 
}) 

Когда метод GET называется он загружает пустую форму, которая является формой = form_class(), по методу POST она должна быть форма = form_class (request.POST). В соответствии с выше код, он снова загружается свежий вид

Добавить оператор возврата внутри блока POST также

return render(request, 'info/contact_us.html', { 
    'form': form_class(request.POST), 
}) 

или

return render(request, 'info/contact_us.html', { 
    'form': form, 
}) 
+0

'form_class (request.POST)' работает, но он показывает ошибки перед записью чего-либо в форме –

+0

Просто исправлено это, мне пришлось поместить «return render form_class (request.POST)» в конце «if_valid»() 'и использовать' return render form_class 'в конце кода –