問題
在開發中通常會使用到css,js,img等靜態文件,關於django如何處理以及配置還是比較糾結,其實官網中有給出詳細說明,只是剛入門者容易混,這裏記錄下配置流程。
配置
1.setting.py先配置
在settings.py中配置靜態文件位置,直接給出配置代碼:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "core/static"),
]
說明:
- STATIC_URL:
配置url地址,當我們要訪問靜態文件時url地址,這裏只是做其中一部分path,結合urlconf會詳細說明;STATIC_ROOT:
配置靜態文件存放目錄,如上代碼所示即在工程的static目錄下存放這些文件;STATICFILES_DIRS:
可能我們工程下會有多個app,或者還會牽涉到其它的靜態資源文件目錄,STATICFILES_DIRS就是列出一些文件目錄,如,在app core下static目錄,此目錄下存放的就是隻與該app相關的資源文件;
2.配置url
在urls.py下:
urlpatterns = [
path('', views.home),
path('list/', views.blog_list, name='blog_list'),
path('cal/', views.add, name='cal'),
url(r'^example/(?P<name>[A-Za-z]+)/$', views.example, name="example")
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
3.驗證
分別在工程static以及app core的static目錄下放文件hello.txt, index.txt
訪問結果:
- http://localhost:8000/static/hello.txt 可正常訪問;
- http://localhost:8000/static/index.txt 訪問不了;
==爲什麼會這樣吶?==
這是因爲雖然在STATICFILES_DIRS下配置了app的靜態目錄,但實際上看url配置就知道訪問還是工程目錄下的static,這裏需要執行下命令:
python manage.py collectstatic
該命令的作用就是copy STATICFILES_DIRS 所聲明目錄下的文件到static下;至此靜態文件配置就可正常工作了;