Django開發階段靜態檔案404解決;nostatic的作用
阿新 • • 發佈:2019-02-07
我使用Django有一些經驗了,部署的時候Debug為False,用Nginx結合uwsgi都可以正常用。
在開發階段,我們使用Django自帶的靜態檔案伺服器,這以前也做過,主要包括:
settings中設定:
STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
其中staticfiles這個app建立專案預設就有,這裡就是確認下。
url中設定:
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
這裡可以根據BASE_DIR和static拼湊出來靜態檔案絕對路徑,我這裡設定的是專案路徑下的static,不是app下的。
執行起來,如:
python manage.py runserver 0.0.0.0:5555
靜態檔案404,因為以前做過,覺得所有都設定對了,為什麼還404,耽誤了幾十分鐘。
這裡開發模式執行要加nostatic來正確處理開發模式中的靜態檔案載入問題,所以命令應該是:
python manage.py runserver 0.0.0.0:5555 --nostatic
所以需要分析下nostatic的作用,有個人的部落格寫得非常詳細:
抄幾句:
--nostatic引數會關閉django.contrib.staticfiles應用。它建立一個django.core.handlers.wsgi.WSGIHandler物件,用來處理靜態請求;
不帶--nostaic引數時,最終,會通過settings.STATICFILES_FINDERS去尋找靜態檔案。其實,中間也用到了django.views.static.serve。但是通過settings.STATICFILES_FINDERS在相應的路勁下,找不到相應的靜態檔案。因為所有靜態檔案都放在STATIC_ROOT下面,而settings.STATICFILES_DIRS中是沒有的,所以,會報錯。解決方法,新建一個不同於STATIC_ROOT的目錄,作為STATICFILES_DIRS,並把相應的靜態檔案放在下面。;