138

Django フォームでは、フォームが有効かどうかを確認できます。

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

しかし、それが有効でない場合はどうすればよいかわかりませんか?エラー メッセージを含むフォームを返すにはどうすればよいですか? どの例にも「else」はありません。

4

8 に答える 8

297

フォームが有効でないときに同じビューをレンダリングすると、テンプレートで を使用してフォーム エラーにアクセス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(request, 'my_template.html', {'form': form})
于 2013-02-01T13:50:51.657 に答える
22

ビュー.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> 
于 2013-02-01T13:51:54.520 に答える
4
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})
于 2013-02-01T13:58:08.893 に答える