在Ajax调用之后,django没有重定向给定url?

时间:2015-12-08 07:30:17

标签: javascript jquery python ajax django

我想在数据库中保存数据时加载图像。所以,我在Ajax上调用它。我使用Django 1.8并且在放入Ajax之后调用Django成功添加数据后没有重定向默认页面。我在保存成功时检查数据,并且view.py方法也运行。

在我向论坛提交无效数据并提交时,在调用Ajax之前,显示验证错误。但现在只查看Ajax错误消息。

before add ajax call

但是在添加ajax之后,现在我输入submit而没有数据没有显示上面的指令(验证错误)。我使用了Django默认验证,它们是在创建表单时定义的模型类。

---------------- keylist.html ---------------------------- -

{ % extends "base.html" %}
{% load crispy_forms_tags %}

{% block title %}
  {% if create %}Create{% else %}New Key{% endif %}Serious
{% endblock %}

{% block heading %}
  <h2>
      Create New Serial Keys
  </h2>
{% endblock %}

{% block content %}
  {% if create %}
    {% url "marcador_key_create" as action_url %}
  {% else %}
    {% url "marcador_bookmark_search" pk=form.instance.pk as action_url %}
  {% endif %}
  <form action="{{ action_url }}" method="post" accept-charset="utf-8" id="createForm" >
    {{ form|crispy }}
    {% csrf_token %}
    <div id="submit_loader"></div>
    <p> <b>Expiry Date*:</b>  <input type="date" id="datepicker" name="expier_date"></p>
    <p><input type="submit" class="btn btn-default" value="Save"   id="save_button"> </p>

  </form>

{% endblock %}

------- base.html(ajax method)--------------------------------- ----

   <script>
       // Attach a submit handler to the form
       $("#createForm").submit(function (event) {
             event.preventDefault();

             //var formData = new FormData($("#createForm")[0]);
             var serverUrl =$("#createForm").attr('action');

             $.ajax({
                        url: serverUrl,
                        type: 'POST',
                        data: $("#createForm").serialize(),

                        beforeSend: function() {
                              $('#submit_loader').css('display','block');
                        },
                       complete: function(){
                              $('#submit_loader').css('display','none');
                       },
                       success: function (returndata) {
                            alert("succsesfully generate keys");
                            //window.location("xsd");
                            //return false;
                       },
                       error: function(data){
                           alert("please ,check you fill form correctly");
                       }
               });
               //return false;
       });
</script>

--------- view.py(调用方法)------------------------------- ---

   @login_required
def key_create(request):
    #print(request.POST)

    if request.method == 'POST':
        form = KeyGenarateForm(data=request.POST)
        expier_date = request.POST['expier_date']
        #print(expier_date=="")
        if(expier_date==""):
            form.is_valid= False;


        if form.is_valid():
             #request.POST._mutable = True
             Key_Gen = form.save(commit=False)
             Key_Gen.save(expier_date)
             return redirect('marcador_bookmark_user',username=request.user.username)
        else:
            print('form not valied')
            return render('marcador_bookmark_user',username=request.user.username)
    else:
        form = KeyGenarateForm()

    context = {'form': form, 'create_key': True}
    return render(request, 'marcador/key_genarate_form.html', context)

我测试输入有效数据并提交,每件事都成功,但没有重定向我的网址。它在现场显示我的旧数据。

因为,我注意到view.py返回方法没有加载。

  return redirect('marcador_bookmark_user',username=request.user.username)

不执行。

请,期待一些专家的帮助。

1 个答案:

答案 0 :(得分:1)

这可能会对你有所帮助:

而不是在views.py中重定向:

return redirect('marcador_bookmark_user',username=request.user.username)

使用它:

return HttpResponse(json.dumps([{username=request.user.username}]),mimetype='text/json')

最后关于ajax成功函数:

window.location.href = '/url-path'+data.username; 

(用户名将是名为“data”的上下文中的一个键。)