Django Admin面板未显示:404错误问题排查与解决求助
问题原因
从错误日志能看到,访问/admin时,请求没匹配到你定义的path('admin/', admin.site.urls)路由,反而被static()函数生成的通配路由^(?P<path>.*)$捕获,导致Django试图去本地文件系统查找E:\Masud Ahmad\Pyhood\MyBlogs\blogone\admin这个静态文件路径,自然会返回404。
核心问题是settings.py里的MEDIA_URL配置错误:如果MEDIA_URL被设为空字符串('')或根路径('/'),static()函数会添加一个捕获所有路径的路由,而Django的URL匹配是按顺序执行的,这个通配路由会覆盖前面的admin/路由。
解决方法
- 修正
MEDIA_URL配置
打开项目的settings.py,确保MEDIA_URL设置为带前缀的路径,示例:
同时确认MEDIA_URL = '/media/'MEDIA_ROOT指向正确的本地目录,示例:import os MEDIA_ROOT = os.path.join(BASE_DIR, 'media') - 重启Django服务
修改配置后,关闭当前的runserver进程,重新启动服务,确保新配置生效。 - 确认路由顺序
你的urls.py中admin/路由在static()之前,这个顺序是正确的,只要MEDIA_URL配置无误,就不会出现通配路由覆盖的问题。
用户提供的错误信息
Page not found (404)
“E:\Masud Ahmad\Pyhood\MyBlogs\blogone\admin” does not exist
Request Method: GET
Request URL: http://127.0.0.1:8000/admin
Raised by: django.views.static.serve
Using the URLconf defined in blogone.urls, Django tried these URL patterns, in this order:admin/
base/ [name='base']
[name='home']^(?P
.*)$
The current path, admin, matched the last one.
用户提供的urls.py代码
from django.contrib import admin from django.urls import path from django.conf import settings from django.conf.urls.static import static from . import views urlpatterns = [ path('admin/', admin.site.urls), path('base/', views.BASE, name='base'), path('', views.INDEX, name='home'), ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
内容的提问来源于stack exchange,提问作者Masud Ahmad

