Je Django formes, il peut vérifier si le formulaire est valide:
if form.is_valid():
return HttpResponseRedirect('/thanks/')
Mais il me manque quoi faire si ce n'est pas valide? Comment renvoyer le formulaire avec les messages d'erreur? Je ne vois pas le "sinon" dans aucun des exemples.
Si vous restituez la même vue lorsque le formulaire n'est pas valide, vous pouvez accéder aux erreurs de formulaire à l'aide de form.errors
dans le modèle.
{% 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 %}
Un exemple:
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()})
Si vous souhaitez afficher les erreurs du formulaire autres que celles non valides, mettez simplement {{form.as_p}} comme ci-dessous.
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})