Django Forms: если недействительно, показать форму с сообщением об ошибке
I формы Django, он может проверить, действительна ли форма:
if form.is_valid():
return HttpResponseRedirect('/thanks/')
Но я пропускаю, что делать, если это недействительно? Как вернуть форму с сообщениями об ошибках? Я не вижу "else" в любом из примеров.
Ответы
Ответ 1
Если вы визуализируете тот же вид, когда форма недействительна, то в шаблоне вы можете получить доступ к ошибкам формы с помощью 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})
Ответ 2
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>
Ответ 3
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,})