学习Django时突发全站Page Not Found错误,求排查方向
嘿,突然遇到全页面404确实挺头疼的——毕竟之前都正常,重启服务器也没用,我帮你梳理几个最可能的排查方向:
1. 先检查APP是否在INSTALLED_APPS里注册
虽然你之前正常,但说不定不小心在settings.py里把music、analysis甚至django.contrib.admin给从INSTALLED_APPS列表里删掉了?Django会忽略未注册的APP的路由配置,包括自带的admin。打开你的settings.py,确认这几个APP都在列表里:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'music', # 确认存在 'analysis', # 确认存在 ]
2. 子APP的urls.py是否有有效路由
你的主路由里用了include('music.urls'),但如果music/urls.py里没有定义能匹配根路径(/music/)的路由,访问时就会404。比如music/urls.py里至少要有一个匹配空路径的规则:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.your_music_view, name='music-home'), # 这个是关键,匹配/music/ # 其他子路由... ]
同样检查analysis/urls.py,确保也有类似的根路径匹配规则。如果子APP的urls.py是空的或者没有匹配根路径的规则,访问时自然会404。
3. 检查路由缓存或__pycache__文件
有时候Django会缓存路由配置,哪怕重启runserver也可能残留旧的缓存。你可以:
- 手动删除项目根目录和各个APP目录下的
__pycache__文件夹 - 如果是Django 2.2及以上版本,运行命令:
python manage.py clearcache
然后重启服务器试试。
4. 确认ROOT_URLCONF配置正确
在settings.py里找到ROOT_URLCONF项,确认它指向的是你当前修改的这个urls.py文件,比如:
ROOT_URLCONF = 'your_project_name.urls' # 替换成你的项目名
如果不小心改成了其他文件,那当前的路由配置根本没被加载。
5. 端口占用或服务器启动异常
你用的是8084端口,有没有可能这个端口被其他程序占用了?试试换个端口启动服务器:
python .\manage.py runserver 8000
然后访问http://127.0.0.1:8000/admin,如果能打开,说明之前的端口有问题。
快速验证小技巧
如果安装了django-extensions(可以用pip install django-extensions安装,然后加到INSTALLED_APPS里),运行命令:
python manage.py show_urls
这个命令会列出所有Django已识别的路由,如果/admin/、/music/、/analysis/都不在列表里,那说明路由根本没被加载,重点回到前几个排查点。
先从这些点开始查,应该能找到问题所在~
内容的提问来源于stack exchange,提问作者Ashutosh Srivastava

