如何在POST之后强制完全重新加载页面

时间:2019-04-04 16:35:30

标签: python django django-views

我正在使用具有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中重新加载页面,则无法执行此操作。

2 个答案:

答案 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。