Форум сайта python.su
На странице есть форма обратной связи, которая добавляется с помощью templatetag:
@register.inclusion_tag('module_contacts/project/tags/form.html') def contact_me_form(): form = ContactForm return {'form': form}
<aside class="widgetWrap hrShadow widget widget_popular_posts" style="padding-top: 20px"> <h3 class="title">Записаться на консультацию</h3> <div id="info"></div> <article> <form action="{% url 'project.contact_me' %}" method="post"> {{ form.as_p }} <div class="sc_button sc_button_style_light sc_button_size_big squareButton fullSize light big margin_bottom_mini ico" id='send_email'> <span class="fa fa-check"> Отправить</span> </div> </form> </article> </aside> <script> $(document).ready(function(){ var m = new Date().getMonth() + 1; var y = new Date().getFullYear(); get_calendar(y, m); }); $(document).on("click", "#send_email", function() { var name = $('#id_name').val(); var email = $('#id_email').val(); var phone = $('#id_phone').val(); var message = $('#id_message').val(); $.ajax({ type: "POST", url: "{% url 'project.contact_me' %}", data: { "name":name, "email":email, "phone":phone, "message":message, } }) .success(function( data ) { data = $.parseJSON(data); status = data.status; if(status==0) { $('#info').removeClass().addClass('sc_infobox sc_infobox_style_error'); } else { $('#info').removeClass().addClass('sc_infobox sc_infobox_style_success'); } $('#info').html(''); $('#info').append(data.info); ready(); }); }); </script>
def contact_me(request): form = ContactForm(data = request.POST) if form.is_valid(): try: form.send_email() info = u'Ваше сообщение отправлено.' status = 1 except: info = sys.exc_info()[0] status = 0 else: info = str(form.errors) status = 0 result = json.dumps({'info':info, 'status': status}) return HttpResponse(result)
Офлайн
Elaphe
вторая функция назад отправляет json с информацией об ошибках и статусе отправки.
Проблема в том, что при таком подходе страница не обновляется
Офлайн
Оказалось достаточно добавить в передаваемый результат еще form:
result = json.dumps({'info':info, 'status': status, 'form': form.as_p()})
Офлайн