Django添加模型外键执行迁移后无法访问admin,提示media/admin路径不存在
解决方案
你遇到的admin访问异常问题和sites框架无关,核心是路由匹配优先级错误、媒体资源配置不全两个原因导致,按以下步骤操作即可修复:
1. 修正settings.py配置
打开项目commerce/settings.py文件,调整媒体资源相关配置:
- 删除冗余的
MEDIA_ROOT = '/media/'配置(后面的同字段配置已经覆盖了这行) - 新增
MEDIA_URL配置,修改后完整的媒体资源配置如下:
# Static files (CSS, JavaScript, Images) STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
2. 调整项目路由顺序
打开项目commerce/urls.py文件,确保admin路由的优先级高于媒体资源路由,正确配置参考:
from django.contrib import admin from django.urls import path from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # admin路由必须放在最前面,避免被其他规则拦截 path('admin/', admin.site.urls), # 其他业务路由请写在admin路由之后 ] # 媒体资源路由要放在urlpatterns列表之外追加,不能写到urlpatterns里面 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注:如果之前你把媒体资源的static配置写到了urlpatterns列表内部、且放在admin路由前面,就会导致Django把
/admin/xxx路径识别为媒体资源,去media目录下查找对应文件,这就是你报错的核心原因。
3. 手动创建media目录
在项目根目录(和db.sqlite3、auctions文件夹同级的位置),手动新建一个名为media的空文件夹。
4. 重启服务验证
修改完成后重启Django开发服务,再次访问admin后台即可正常打开。
补充:如果后续上传Listing的图片时报依赖错误,执行
pip install pillow安装图片处理依赖即可。
内容的提问来源于stack exchange,提问作者VaultDweller
相关产品推荐
相关产品推荐

