Django代码配置正确仍无法链接页面 提示页面找不到如何解决
现有应用层路由、视图代码无语法错误,404本质是请求路径没有匹配到任何注册的路由规则,按以下顺序逐一排查即可:
核对根路由配置
首先确认项目根目录mysite/urls.py中已正确导入include方法,且应用路由的挂载路径配置正确,参考标准配置:from django.contrib import admin from django.urls import path, include # 多数人漏写导入include直接导致路由失效 urlpatterns = [ path("admin/", admin.site.urls), # 替换为你实际的应用名,路径前缀决定访问地址的前缀段,末尾必须带斜杠 path("todo/", include("your_app_name.urls")), ]举个实际访问示例:根路由挂载前缀为
todo/,应用内路由为<str:name>,数据库中存在name为work的ToDoList记录时,正确访问地址为http://127.0.0.1:8000/todo/work,地址拼错、漏前缀都会直接触发404。确认自定义应用已注册
打开settings.py找到INSTALLED_APPS列表,确认你的待办应用已经加入列表,否则Django不会正常加载应用内的路由、模型配置:INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", # 追加你的自定义应用,比如应用名为todolist就加下面这行 "todolist", ]修复斜杠匹配问题
Django默认开启APPEND_SLASH = True配置,依赖CommonMiddleware中间件实现斜杠自动补全跳转,两个配置缺一个就可能因为斜杠不匹配触发404:- 检查
settings.py的MIDDLEWARE列表,确认存在django.middleware.common.CommonMiddleware,缺失则手动补上 - 给应用内的动态路由补上末尾斜杠,降低匹配出错概率,修改应用下
urls.py的路由规则:
修改后对应访问地址变为urlpatterns = [ path("<str:name>/", views.index ,name="index"), ]http://127.0.0.1:8000/todo/work/。
- 检查
调整路由匹配优先级
Django的路由规则是从上到下顺序匹配,如果你在根路由或应用路由中,把<str:xxx>这类匹配范围大的通用路由放在了当前路由前面,请求会被前置路由提前拦截,无法匹配到目标视图,把精准度更高的路由往前调整即可。基础校验项
<str:name>路径转换器只能匹配不含斜杠的字符串,传入的name参数带斜杠会直接匹配失败- 修改路由、配置文件后手动重启开发服务(执行
python manage.py runserver),避免开发服务自动重载失效导致配置不生效 - 确认访问的端口和服务启动端口一致,避免端口占用导致请求打到其他Django项目上
- 现有路由规则要求必须传入name参数,如果直接访问站点根路径(如
http://127.0.0.1:8000/)必然报404,需要根路径访问的话单独配置空路径路由即可。
补充:如果以上配置都改完后访问报500错误,属于视图逻辑问题:
ToDoList.objects.get(name=name)查询时,如果数据库中不存在对应name的记录,会抛出DoesNotExist异常,和当前404问题无关,后续可加异常捕获逻辑优化。
内容的提问来源于stack exchange,提问作者Pushkar Raj Tiwari

