Django - 重定向回页面显示http响应(Json数据)而不是呈现

Posted

技术标签:

【中文标题】Django - 重定向回页面显示http响应(Json数据)而不是呈现【英文标题】:Django - redirecting back to a page shows http response (Json data) and not rendering 【发布时间】:2020-06-09 05:36:08 【问题描述】:

问题:如果用户像这样重定向,那么处理这个问题的最佳方法是什么,以便不显示 json 响应?还是让用户回到检索数据之前的测验状态?

解释起来有点尴尬。我正在使用 django 创建一个测验应用程序。用户可以选择要进行的测验,当他们选择要被带到以下页面的测验时: (截图一)

当测验开始时,会向后端发送一个 ajax 请求,以检索测验的问题并将其显示给用户。问题是如果测验已经开始并且我使用浏览器的后退按钮然后重新加载它显示 json 响应而不是(屏幕截图 1)它显示的页面:

Json 响应

View.py

def active_quiz(request, quiz_pk):
    quiz = Quiz.objects.filter(pk=quiz_pk)

    questions = Questions.objects.filter(quiz=quiz_pk)

    if request.is_ajax():
        if request.method =="GET":
            serial = serializers.serialize("json", Questions.objects.filter(quiz=quiz_pk))

            response_data = serial
            return HttpResponse(response_data, content_type="application/json")

    args='question': questions, 'quiz': quiz
    return render(request, 'quiz/quiz_active.html', args

【问题讨论】:

【参考方案1】:

我知道这可能不是您期望的答案,但您应该拆分您的视图,并为 API 和呈现目的创建两个不同的端点。

另外,你能看看这个吗?

request.is_ajax() == True when clicking back button?

【讨论】:

【参考方案2】:

我建议使用JsonResponse 而不是HttpResponse。它将转到您的 ajax。

return JsonResponse(json_object, safe=False)

【讨论】:

使用 JsonResponse 仍然会产生相同的 json 数据,但以字符串格式,它不能解决用户在浏览器来回重定向时可以查看的 json 数据的问题。干杯 - 达伦

以上是关于Django - 重定向回页面显示http响应(Json数据)而不是呈现的主要内容,如果未能解决你的问题,请参考以下文章

当我有“下一个”网址时,如何禁用网址重定向? - 姜戈

Django - 登录后,将用户重定向到他/她所在的页面

重定向/返回到Django中的相同(上一个)页面?

Django:测试页面是不是已重定向到所需的 url

Django用户身份验证:登录后不重定向

在 Django 模型保存方法中需要帮助