首页 > 解决方案 > 如何在 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')

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

这可能是缓存问题,但想要更新页面但如果页面在 POST 之后没有在 GET 中重新加载,我不能这样做。

标签: pythondjangodjango-views

解决方案


您的重定向实际上有效,但是当您使用Ajax发出请求时,您的浏览器不会被重定向,只有您的 ajax 请求被重定向,并且不会更改浏览器中的页面 url。

这实际上是 ajax 请求的全部意义所在,您可以在不更改浏览器 url 的情况下与服务器交换信息。您对 ajax 请求所做的任何事情都不会影响浏览器 url。

如果您将一个没有 ajax 的 html 表单发布到此 url,您的 post 方法将被执行,然后您的页面将使用 get 请求重定向。

要使用 ajax 做你想做的事,我建议你不要在你的 post 请求结束时重定向,而是返回一个成功的响应。然后,在客户端,发出 ajax 请求,并在请求的成功处理程序上重新加载页面。


推荐阅读