猿问

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

我正在使用带有 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')

这样做的问题是 djangoget在重定向后不会重新执行该方法(可以在 firebug 中确认 GET 请求)。如果我F5在浏览器中手动点击,我可以看到修改后的数据。


这可能是缓存问题,但想要更新页面,但如果在 POST 后没有在 GET 中重新加载页面,我就无法执行此操作。


德玛西亚99
浏览 256回答 2
2回答

噜噜哒

您的重定向实际上有效,但是当您使用Ajax发出请求时,您的浏览器不会被重定向,只会重定向您的 ajax 请求,并且不会更改浏览器中的页面 url。这实际上是 ajax 请求的全部内容,您无需更改浏览器 url 即可与服务器交换信息。您对 ajax 请求所做的任何操作都不会影响浏览器 url。如果您将没有 ajax 的 html 表单发布到此 url,您的 post 方法将被执行,然后您的页面将使用 get 请求重定向。要使用 ajax 做你想做的事,我建议你不要在你的 post 请求结束时重定向,而是返回一个成功的响应。然后,在客户端,发出 ajax 请求,并在请求的成功处理程序上重新加载页面。

MM们

要解决这个问题,您必须从 Ajax 调用重定向:$.post("",{active: status,        success: function(){          window.location = "";        },        'csrfmiddlewaretoken':jQuery("[name=csrfmiddlewaretoken]").val()});这是通过window.location="";我传递一个空字符串来完成的,因为我正在重定向到同一页面,但您可以传递任何 url。
随时随地看视频慕课网APP

相关分类

Python
我要回答