Django测试中调用get方法出现HttpResponseNotFound问题排查
解决方案
问题根源在于URL路径的末尾斜杠不匹配:
- URL配置里定义的路径是
request/download_template(没有末尾斜杠) - 测试代码里请求的路径是
/request/download_template/(带有末尾斜杠)
Django的path()是精确匹配规则,不会自动兼容末尾斜杠的差异,所以测试请求的路径和配置的URL完全不匹配,直接返回404,自然也不会执行视图里的代码。
你可以任选以下两种方式修复:
- 修改测试代码,去掉请求路径末尾的斜杠:
response = self.client.get('/request/download_template')
- 修改URL配置,给路径加上末尾斜杠:
path('request/download_template/', ExampleView.as_view()),
额外提示:虽然Django默认开启APPEND_SLASH = True,会自动给缺少斜杠的请求重定向到带斜杠的路径,但测试用的APIClient默认不会自动跟随重定向,所以最稳妥的方式还是保持请求路径和URL配置完全一致。
内容的提问来源于stack exchange,提问作者Nikko
相关产品推荐
相关产品推荐

