web-dev-qa-db-ja.com

Django Forms:有効でない場合、エラーメッセージ付きのフォームを表示します

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

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

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

91
user984003

フォームが無効なときに同じビューをレンダリングすると、テンプレートで 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})
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()})

無効なフォーム以外のエラーを表示したい場合は、以下のように{{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> 
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