Django Forms: если не является допустимым, показать форму с сообщением об ошибке
Я Django формы, он может проверить, является ли форма действительной:
if form.is_valid():
return HttpResponseRedirect('/thanks/')
но мне не хватает, что делать, если он не действителен? Как вернуть форму с сообщениями об ошибках? Я не вижу "еще" ни в одном из примеров.
3 ответа:
Если вы отображаете одно и то же представление, когда форма недействительна, то в шаблоне вы можете получить доступ к ошибкам формы с помощью
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}} как то, что я сделал ниже
страница.HTML-код
<html> <head> <script> {% if messages %} {% for message in messages %} alert(message); {% endfor %} {% endif %} </script> </head> <body> {{form.as_p}} </body> </html>