首页 > 解决方案 > Django重定向返回200但页面没有改变

问题描述

我在 Django 中有一个表单,我使用如下代码提交:

  XHR.open("POST", "/route/to/post/view");
  XHR.send(formData);

它的路线看起来像这样:

def my_view(request):
    if request.method == "GET":
        context = {"object": Perso.objects.all()}
    
        return render(request, "myview.html", context)

    elif request.method == "POST":
        print("post request is", request.POST)
        print("redirecting...")
        return redirect("/route/to/another-view")

我知道这可以正常工作,因为当我按下 POST 按钮页面时会打印以下输出:

post request is <QueryDict: {'csrfmiddlewaretoken': ['6pdzvTNVO8d1KhS9w3IevFGD7w3bprBRQtUaO1TuXDS4RIkTP44IlFdYwJQB7czx'], 'vaccinator': ['tilley evan']}>
redirecting...
[12/Apr/2021 15:42:34] "POST /route/to/post/view HTTP/1.1" 302 0 
[12/Apr/2021 15:42:34] "GET /route/to/another-view HTTP/1.1" 200 3546

在 Chrome 中,我可以看到发出了成功的 GET 请求,但由于某种原因,页面本身并没有改变。

这里有什么建议吗?

标签: pythondjangohttpredirect

解决方案


当请求被重定向时,它实际上是 XHR 请求,而不是浏览器。那时,浏览器本身没有请求,只有 javascript。我建议您/route/to/post/view返回一个 URL(例如在 JSON 中),然后window.location在 JS 中使用来重定向浏览器。

解释得不好,我知道,我只是想不出更好的方法来区分“浏览器”和“js”部分。


推荐阅读