Django DEBUG=True静态文件404问题

现象

Django设置 DEBUG=False后,访问前端报错 MIME 类型(“text/html”)不匹配(X-Content-Type-Options: nosniff)
所有 css 和 js 文件都无法访问,后台显示404。

分析

出现的问题根本原因是:当我们在开发django应用时如果设置了 DEBUG = True,那么django便会自动帮我们对静态文件进行路由;但是当我们设置DEBUG = False后,这一功能便没有了,此时静态文件就会出现加载失败的情况,想要让静态文件正常显示,我们就需要配置静态文件服务了。官方文档

解决

setting.py

setting.py配置文件修改如下

1
2
3
4
5
STATIC_URL = '/static/'
STATIC_ROOT = 'static' ## 新增行
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # DEBUG=False时,注释掉就行
]

urls.py

主项目的urls.py文件添加如下代码

1
2
3
4
5
6
7
8
9
from django.views import static ##新增
from django.conf import settings ##新增
from django.conf.urls import url ##新增
urlpatterns = [
path('', include('user.urls')),
 ## 以下是新增
url(r'^static/(?P<path>.*)$', static.serve,
{'document_root': settings.STATIC_ROOT}, name='static'),
]

我的到这里就解决了,但是如果你的还没解决的话可以尝试下面的修改。
settings.py同级__init__.py文件内添加以下代码:

1
2
3
import mimetypes
mimetypes.add_type("text/css", ".css", True)
mimetypes.add_type("text/javascript", ".js", True)

文章转自知乎【风吹白杨树】,原文链接


Django DEBUG=True静态文件404问题
http://example.com/p/3c993fb8.html
作者
卡普
发布于
2021年12月17日
许可协议
TURE