移除Django项目/admin路径后,后台PDF文件无法在浏览器打开
问题排查与解决:Django Admin根路径下媒体文件404错误
问题原因
当将admin.site.urls挂载到根路径''时,Django的URL路由会优先匹配admin的URL配置。而你通过static()添加的媒体文件路由是追加在urlpatterns末尾的,当访问/media/xxx这类路径时,admin的URLconf会先尝试匹配该路径——由于admin没有对应的路由规则,直接返回404,根本轮不到后面的媒体路由生效。
解决办法
方法1:调整路由顺序,让媒体路由优先匹配
修改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 = [] # 先添加媒体路由,确保优先被匹配 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # 再添加Admin根路径路由 urlpatterns += [ path('', admin.site.urls), ]
方法2:用正则路由精确锁定媒体路径(更严谨)
如果担心路由匹配的模糊性,可通过正则表达式精确匹配/media/开头的路径,避免被admin路由拦截:
from django.contrib import admin from django.urls import path, re_path from django.conf import settings from django.conf.urls.static import static # 取出static()生成的媒体视图,用正则精确匹配路径 media_view = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)[0] urlpatterns = [ re_path(r'^media/(?P<path>.*)$', media_view), path('', admin.site.urls), ]
验证
修改完成后重启Django开发服务器,再次点击管理面板中的PDF文件链接,即可正常访问媒体文件。
内容的提问来源于stack exchange,提问作者Jonibek
相关产品推荐
相关产品推荐

