2012-05-16 58 views
0

我正在使用django表单来更新一些细节。一旦点击保存更改,就会执行ajax调用,执行视图,发送ajax响应,在页面中执行的成功代码再次重新加载。 n在重新加载时,如果form不再有效,则执行from.is_valid()的else部分。Django表单提交 - 避免页面重定向

if form.is_valid: 
    #do something 
    return HttpResponse(simplejson.dumps(response), mimetype='application/json') 
else: 
    #do something 
    return render_to_response('ts.html', {'form': form}, context_instance = RequestContext(request)) 

我想避免页面重新加载成功的表单提交和绝对路径返回ajax响应。如何实现这一目标?

我改变了我的代码,这里是视图,模板和jQuery。

if request.POST: 
    if form.valid(): 
     if credentials.correct(): 
       resp = {'success': True} 
       return HttpResponse(simplejson.dumps(resp), mimetype='application/json') 
     else: 
       resp = {'success': False} 
       return HttpResponse(simplejson.dumps(resp), mimetype='application/json') 
    else: 
     print "error in form" 
     return render(request, 'manage_accounts.html', {'creds': creds, 'form': form}) 
else: 
    form = SomeForm() 
    return render(request, 'manage_accounts.html', {'creds': creds, 'form': form}) 

模板

<form action="/accounts/" method="POST" id="bitlychangeform"> 
    <div id="ajaxwrapper"> 
{% csrf_token %} 
{{ form.non_field_errors }} 
<!--{% include "Change_bitly_form.html" %}--> 
{{ form.as_p }} 
     <div class="clearfix"> 
     <label></label> 
      <div class="input" style="float:right"> 
      <input type="submit" id="save" value="Save Changes" class="btn btn-primary "/> 
     </div> 
    </div> 
    </div> 
</form> 

的Jquery:

$(function(){ 
var form = $('#bitlychangeform'); 
    form.submit(function(e) { 
    jQuery("#save").attr('disabled', true) 
    jQuery("#ajaxwrapper").load(
      form.attr('action') + ' #ajaxwrapper', 
      form.serializeArray(), 
      function(data) { 
       jQuery("#save").attr('disabled', false) 
     alert(data); 
      }); 
    return false; 
     e.preventDefault(); 
    }); 
}); 

的页面重载不会当我使用Django的形式{{form.as_p}}但是当我使用一个“发生表单的自定义模板为带**的密码字段字段,并且只有在单击编辑按钮后才可编辑“,form.valid()返回false。

我需要django表单作为我自定义的表单模板,就像我期望的那样。任何人都可以指导我。

+0

你没有在django中重定向。我会看看你的形式'onSubmit'方法是'返回False',以便它不重定向。也许有更多的“djangonic”方式来做到这一点。 – dm03514

+0

你能展示模板,AJAX和全视图代码吗? – super9

回答

1

我想你没有覆盖前端的默认表单提交行为,并且你正在提交你的表单。

确保您禁止表单提交的默认行为。 This page 提供下模板/接触一个很好的例子/ form.html

1

您可以通过返回的提交表单的错误在JavaScript处理这个问题。

form.submit(){ 
    #do something 
    #make AJAX call 
    #do something 
    return false; 
} 
相关问题