Django使用HttpResponse编写视图后访问触发404页面未找到错误
Django 访问404错误排查与解决
核心报错原因
当前404报错和views.py里的HttpResponse代码完全无关,本质是请求路径和已配置的路由规则不匹配。
- 你浏览器实际发起的GET请求路径是
/It%20is%20working...!,URL解码后为/It is working...! - 你在
urls.py中配置的根视图路由规则为path('', Index),仅当访问http://127.0.0.1:8000/(路径完全为空)时才会触发该视图 - Django的路由匹配为严格规则匹配,无通配配置的前提下,请求路径和配置的字符串存在任何字符差异,都会返回404。
分步排查指引
- 核对浏览器实际访问路径
清空地址栏中http://127.0.0.1:8000/后面的所有字符,直接访问纯根路径,验证是否能正常返回字符串Danial。 - 核对视图导入关系
确认urls.py中导入的Index函数,确实是你在api/views.py中定义的返回HttpResponse("Danial")的函数,没有跨app导入错误。 - 理解路由匹配逻辑
urlpatterns列表的规则是按从上到下的顺序做前缀匹配:- 第一条规则
path('admin/', admin.site.urls)仅匹配路径以admin/开头的请求 - 第二条规则
path('', Index)仅匹配路径为完全空字符串的根请求,只要根路径后附带任何字符,都无法命中该规则
- 第一条规则
新手常见认知误区
很多开发者刚启动Django开发服务器时,会把控制台输出的服务启动提示、运行日志文本(比如It is working...!),当成需要手动输入到地址栏的访问路径。实际上这类文本只是服务运行的日志输出,并非需要访问的路由地址。
如果确实需要让/It is working...!这个路径也能返回对应响应,可以在urlpatterns列表中新增一条对应路由规则path('It is working...!', Index),但这属于自定义路由配置范畴,不是代码运行错误。
注:当前报错是DEBUG模式开启时的原生提示,当DEBUG设为False且配置了允许的主机列表后,会展示自定义的标准404页面。
内容的提问来源于stack exchange,提问作者Mian Danial
相关产品推荐
相关产品推荐

