Подтвердить что ты не робот

Django Forms: если недействительно, показать форму с сообщением об ошибке

I формы Django, он может проверить, действительна ли форма:

if form.is_valid(): 
    return HttpResponseRedirect('/thanks/')

Но я пропускаю, что делать, если это недействительно? Как вернуть форму с сообщениями об ошибках? Я не вижу "else" в любом из примеров.

4b9b3361

Ответ 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,})