Django中AJAX GET请求后重定向

Redirect after AJAX GET request in Django

本文关键字:重定向 请求 GET AJAX Django      更新时间:2023-09-26

我是Django和AJAX(javascript)的新手。最后,我可以向django视图发送一些参数。此视图呈现编辑表单。我向表单发送参数和视图响应以及我需要的信息,但我无法重定向到从视图呈现的表单。AJAX功能:

$.ajax({
    type:"GET",
    url: "/recepcion/",
    datatype: 'json',
    data: ({i: idpro[0].innerHTML, a: ano[1].innerHTML, m: mes1[2].innerHTML }),
    success: function(data){
      window.location.href = data.redirect;
      //window.open("GET",url,true)
      }
});

django视图:

def RecepcionView(request):
    idp = request.GET.get('i')
    anio = request.GET.get('a')
    mes = request.GET.get('m')
    if request.method == 'POST':
       r = DetalleRecepcion.objects.get(id_proveedor=idp,anio=anio,mes=mes)
       form = RecepcionForm(request.POST, instance=r)
       if form.is_valid():
          form.save()
          return HttpResponseRedirect('/monitor/')
    else:
       r = DetalleRecepcion.objects.get(id_proveedor=idp,anio=anio,mes=mes)
       form = RecepcionForm(instance=r)
    return render_to_response('recepcion.html',
                              {'form':form},
                              context_instance=RequestContext(request))

在firebug控制台中,我可以看到响应,这是我需要的带有信息的表单。我不知道如何从响应重定向到页面,我不确定是必须在django视图中添加一些重定向函数,还是仅在ajax成功函数中添加。我对这两种语言真的很陌生,我很困惑错误在哪里。

提前感谢

从您的代码中,我猜您有一个"常规"视图(而不是用于处理ajax数据的视图)。重定向可以在视图中实现,不需要ajax。只需提交表格。在你的recepcon.html文件中写一些类似的东西

some html
<form method="POST" action=""> <!-- we leave the action part blank, to send the data to the same view -->
    {{ form }} <!-- the form you are passing to the template -->
    {% csrf_token %} <!-- do not forget the token or django will return an error -->
    <input type="submit" name="submit" value="Submit"/>
</form>
some html

Btw:

  • 可以使用渲染(https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render)而不是render_to_response(您不必每次都传递请求)
  • 您可以使用reverse函数重定向到url。即写HttpResponseRedirect('/monitor/')而不是HttpResponse redirect,(reverse('name_of_the_view_you_want_to_redirect_to'),https://docs.djangoproject.com/en/1.6/ref/urlresolvers/#reverse.