IT story

Django Forms : 유효하지 않은 경우 오류 메시지와 함께 양식 표시

hot-time 2020. 8. 31. 08:24
반응형

Django Forms : 유효하지 않은 경우 오류 메시지와 함께 양식 표시


장고 양식, 양식이 유효한지 확인할 수 있습니다.

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

하지만 유효하지 않은 경우 어떻게해야하나요? 오류 메시지가있는 양식을 어떻게 반환합니까? 예제에서 "else"가 보이지 않습니다.


양식이 유효하지 않을 때 동일한보기를 렌더링하면 템플릿에서를 사용하여 양식 오류에 액세스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}}를 입력하세요.

page.html

<html>
    <head>
        <script>
            {% if messages %}
                {% for message in messages %}
                    alert(message);
                {% endfor %}
            {% endif %}
        </script>
    </head>
    <body>
        {{form.as_p}}
    </body>
</html> 

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})

단순히 플래그 변수를 넣을 수 있습니다 (이 경우 is_successed) .

def preorder_view(request, pk, template_name='preorders/preorder_form.html'):
    is_successed=0
    formset = PreorderHasProductsForm(request.POST)
    client= get_object_or_404(Client, pk=pk)
    if request.method=='POST':
        #populate the form with data from the request
       # formset = PreorderHasProductsForm(request.POST)
        if formset.is_valid():
            is_successed=1
            preorder_date=formset.cleaned_data['preorder_date']
            product=formset.cleaned_data['preorder_has_products']
            return render(request, template_name, {'preorder_date':preorder_date,'product':product,'is_successed':is_successed,'formset':formset})



    return render(request, template_name, {'object':client,'formset':formset})

나중에 템플릿에 아래 코드를 넣을 수 있습니다.

{%if is_successed == 1 %}
<h1>{{preorder_date}}</h1>
<h2> {{product}}</h2>
{%endif %}

참고 URL : https://stackoverflow.com/questions/14647723/django-forms-if-not-valid-show-form-with-error-message

반응형