Static Files
Static files(靜態檔案) 指 CSS、JavaScript、圖片這類內容不會因請求而改變的檔案,與 Model 產生、會變動的資料不同。Django 提供一套機制,讓開發時與正式上線時都能用同一套方式在 Template 中引用這些檔案。
官方文件:How to manage static files、How to deploy static files、Django Settings。
settings.py 中的設定
INSTALLED_APPS 需要有 django.contrib.staticfiles(新建立的 Project 預設已加入),並設定 STATIC_URL(預設也已設定好):
在 Template 中使用
Template 中要先載入 static 標籤庫,再用 {% static %} 反查靜態資源實際對應的網址:
用 {% static %} 而不是直接寫死路徑,好處是正式環境常會把靜態檔案搬到 CDN 或另一個網域,{% static %} 會自動依 STATIC_URL 產生正確的網址,不用逐一修改 Template。
App 相關的靜態資源放哪裡
每個 App 相關的靜態資源,通常放在該 App 底下的 static/ 目錄。慣例上會在 static/ 底下再建立一層與 App 同名的子目錄(原理與 Templates 頁提到的樣板目錄慣例相同),避免不同 App 的檔名互相覆蓋:
部署時收集靜態檔案
開發階段,runserver 會自動幫你從各個 App 的 static/ 目錄找檔案。但正式環境通常不會用 runserver,而是交給 Web Server(例如 nginx)直接服務靜態檔案,效能更好。上線前需要執行:
這個指令會把所有 App 的靜態檔案,統一收集到 STATIC_ROOT 設定指定的目錄,之後就能設定 Web Server 直接指向這個目錄。詳細的部署流程請見 Deployment。
下一步
靜態檔案設定好之後,接著看整體部署流程:Deployment。