我正在使用具有get和post方法的基于类的视图
class MyView(View):
def get(self,request, *args, **kwargs):
#some code
def post(self,request, *args, **kwargs):
#update some data which is used in the view
return redirect('app:my-view')
此问题是django在重定向后不会重新执行get
方法(可以在firebug中确认GET请求)。如果我在浏览器中手动点击F5
,则可以看到修改后的数据。
这可能是缓存问题,但是想要更新页面,但是如果在POST之后没有在GET中重新加载页面,则无法执行此操作。
答案 0 :(得分:1)
您的重定向确实有效,但是当您使用 Ajax 发出请求时,您的浏览器未重定向,只有您的ajax请求被重定向,并且不会更改页面网址在浏览器中。
这实际上就是ajax请求的全部内容,您无需更改浏览器URL即可与服务器交换信息。您对ajax请求所做的任何操作都不会影响浏览器的网址。
如果您将没有ajax的html表单发布到该URL,则将执行post方法,然后使用get请求将页面重定向。
要使用ajax完成您想做的事情,建议您不要在发布请求结束时重定向,而应返回成功响应。然后,在客户端发出ajax请求,然后在请求的成功处理程序上重新加载页面。
答案 1 :(得分:0)
要解决此问题,您必须从Ajax调用重定向:
$.post("",{active: status,
success: function(){
window.location = "";
},
'csrfmiddlewaretoken':jQuery("[name=csrfmiddlewaretoken]").val()});
这是通过window.location="";
完成的,我正在传递一个空字符串,因为我将重定向到同一页面,但是您可以传递任何url。