在函数内调用Django redirect失效,求原因及解决方法
Django重定向函数调用失效的原因及修复
问题原因
你的test()函数已经正确生成了重定向响应对象,但在视图my_view中,只是调用了test()却没有将它的返回值返回给Django。Django视图必须返回HttpResponse或其子类(比如redirect返回的HttpResponseRedirect)才能让响应生效,你当前直接跳过了test()的返回结果,转而返回了普通的HttpResponse,所以重定向逻辑没触发。
修复后的代码
只需要在视图中返回test()函数的结果即可:
from django.shortcuts import redirect from django.http import HttpResponse def test(): return redirect("https://stackoverflow.com") def my_view(request): # 返回test生成的重定向响应 return test() # 此句不会执行,因为上方已经return return HttpResponse("<p>redirection did not work</p>")
扩展:需要request对象的情况
如果后续test函数需要依赖请求对象做逻辑处理,记得把request传进去:
def test(request): # 这里可以使用request做自定义逻辑 return redirect("https://stackoverflow.com") def my_view(request): return test(request)
内容的提问来源于stack exchange,提问作者Staehlo
相关产品推荐
相关产品推荐

