I Djangoフォームで、フォームが有効かどうかを確認できます。
if form.is_valid():
return HttpResponseRedirect('/thanks/')
しかし、有効でない場合はどうすればいいですか?エラーメッセージを含むフォームを返すにはどうすればよいですか?いずれの例にも「その他」はありません。
フォームが無効なときに同じビューをレンダリングすると、テンプレートで form.errors
を使用してフォームエラーにアクセスできます を使用できます。
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
例:
def myView(request):
form = myForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid():
return HttpResponseRedirect('/thanks/')
return render_to_response('my_template.html', {'form': form})
views.py
from Django.contrib import messages
def view_name(request):
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
return HttpResponseRedirect('/thanks'/)
else:
messages.error(request, "Error")
return render(request, 'page.html', {'form':form_class()})
無効なフォーム以外のエラーを表示したい場合は、以下のように{{form.as_p}}を入力してください
page.html
<html>
<head>
<script>
{% if messages %}
{% for message in messages %}
alert(message);
{% endfor %}
{% endif %}
</script>
</head>
<body>
{{form.as_p}}
</body>
</html>
def some_view(request):
if request.method == 'POST':
form = SomeForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/thanks'/)
else:
form = SomeForm()
return render(request, 'some_form.html', {'form': form})