1. 程式人生 > >Django開發階段靜態檔案404解決;nostatic的作用

Django開發階段靜態檔案404解決;nostatic的作用

我使用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,並把相應的靜態檔案放在下面。;