Display the form errors in the django template with ajax post

1,396 views
Skip to first unread message

Robin Lery

unread,
Dec 24, 2015, 4:22:30 PM12/24/15
to django...@googlegroups.com
I have a contact form through which users would be able to contact me. I am using django with ajax, and it works fine if there's no error. I would like to show the errors if there's any like it displays above the input fields and not just the errors, but both the input and the errors. It does however differentiate between the success and error result, as the ajax request was successful. But I need to display the actual form errors. How do I that? Your help will be very much appreciated. Thank you.

views:

def contact(request):
    if request.is_ajax() and request.POST:
        form = ContactForm(request.POST)
        if form.is_valid():
            new_contact = form.save()
            data = {
                'result': 'success',
                'message': 'Message Sent.'
            }
            return JsonResponse(data)
        else:
            data = {
                'result': 'error',
                'message': 'Form invalid',
                'form': 'oops.'
            }
            return JsonResponse(data)
    else:
        form = ContactForm()
        return render(request, 'public_contact.html', {
            'form': form
        })



js:

contact_right_form.find('#submit').on('click', function(event) {
    event.preventDefault();
    $.ajax({
        type: contact_right_form.attr('method'),
        url: '/contact/',
        data: contact_right_form.serialize(),
        dataType: 'json',
        success: function(data) {
            if ( data.result == 'success') {
                contact_right_message_sent.text(data.message);
                contact_right_message_sent.show();
            }
            else {
                contact_right_message_sent.text(data.message);
                contact_right_message_sent.show();
            }
        },
        error: function() {
            contact_right_message_sent.text('Sorry! Something went wrong.')
        }
    });
})

Luis Zárate

unread,
Dec 29, 2015, 5:58:33 PM12/29/15
to django...@googlegroups.com
I do it like this

create a form template (for abbreviation I will use {{form}}

form_template.html
{{form}}

in include form_template.html public_contact.html
<html>
....
{% include 'form_template.html' %}
</html>
 
and in the ajax response

from django.template.loader import render_to_string

else:
            data = {
                'result': 'error',
                'message': 'Form invalid',
                'form': render_to_string('form_template.html', {'form': form})
            }
            return JsonResponse(data)


I hope this will help you.
--
"La utopía sirve para caminar" Fernando Birri


Reply all
Reply to author
Forward
0 new messages