1
私は、ValidationErrorを引き上げる際に問題があります。ユーザが1,2,3ワードだけを書き込むと表示されません。私がsubmitを押すと、それはタイトルContactとsubmitボタンだけが表示されます。ユーザーが4単語以下で書き込む場合に表示されます。フォームが無効である場合Django raise ValidationError
views.py
def contact(request):
data = dict()
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
try:
send_mail(subject, message, email, ['[email protected]'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
return HttpResponseRedirect('/contact/thanks/')
else:
data['form'] = ContactForm(
initial={'subject': 'I love your site!'}
)
return render(request, 'contact_form.html', data)
forms.py
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
email = forms.EmailField(required=True)
message = forms.CharField(widget=forms.Textarea, min_length=7)
def clean_message(self):
message = self.cleaned_data['message']
num_words = len(message.split())
if num_words < 4:
raise forms.ValidationError('Not enough words!')
return message
contact_form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contact us</title>
</head>
<body>
<h1>Contact us</h1>
<form action="" method="POST">
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
<input type="submit" value="Submit">
</form>
</body>
</html>
OK、それが動作しますが、それはデータ[「フォーム」] =フォームで作業していない理由を私は理解していない –
'データ[「フォーム」] =フォーム 'はリダイレクトの直下にある必要があります。 – Udi
ありがとうございましたデータは['form'] = form aswell –