- 問題描述
Django設置 DEBUG=False後,訪問前端報錯 MIME 類型(“text/html”)不匹配(X-Content-Type-Options: nosniff)
所有 css 和 js 文件都無法訪問,後臺顯示404 -
問題分析
出現的問題根本原因是:當我們在開發django應用時如果設置了 DEBUG = True,那麼django便會自動幫我們對靜態文件進行路由;但是當我們設置DEBUG = False後,這一功能便沒有了,此時靜態文件就會出現加載失敗的情況,想要讓靜態文件正常顯示,我們就需要配置靜態文件服務了。參考官方文檔https://docs.djangoproject.com/en/2.0/howto/static-files/ -
解決方式
首先修改App setting.py文件
STATIC_URL = '/static/' STATIC_ROOT = 'static' ## 新增行 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), # DEBUG=False時,註釋掉就行 ]
修改urls.py
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文件內添加以下代碼 import mimetypes mimetypes.add_type("text/css", ".css", True) mimetypes.add_type("text/javascript", ".js", True)
-
總結
DEBUG = True # setting DEBUG = True STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
DEBUG = False # setting DEBUG = False STATIC_ROOT = 'static' ## 新增行 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), #註釋掉, 不然會報錯 ] 在settings.py同級__init__.py文件內添加以下代碼 import mimetypes mimetypes.add_type("text/css", ".css", True) mimetypes.add_type("text/javascript", ".js", True)