2016-12-29 8 views
0

私のフォームにエラーが表示されています。フォームが無効な場合は、ページを再ロードしてもエラーは表示されません。レンダリングエラーが発生しないdjango-forms

を私は、電子メールが無効であることを言ってテキストを示すように、エラーを表示したい、または電話番号に無効な文字が含まれていることを は、ここに私のコードです:

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

バグこのラインGETメソッドは、それがフォーム= form_classある(空のフォームをロードと呼ばれる

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

)上で、POSTメソッドでは、フォームであるべき= form_class(request.POST)。上記のコードごとのように、再び新鮮なフォームロードされ

があなたのPOSTブロック内あなたのreturn文を追加します。また、

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

if_valid()の最後に 'return render form_class(request.POST) 'を使用し、コードの最後に' return render form_class 'を使用します –

関連する問題