web-dev-qa-db-fra.com

Django Forms: si non valide, affiche le formulaire avec un message d'erreur

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.

91
user984003

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})
202
Aamir Adnan

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> 
11
catherine
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})
3
Lukasz Koziara