Django 靜態文件管理:static 與 staticfiles 完整指南

更新日期: 2025 年 1 月 1 日

本文為 Django + Vue 前後端分離解析,第 15 篇

  1. 前後端分離的 404 錯誤處理:步驟指南
  2. 正常網頁與 API 接口:新手指南
  3. GraphQL 與 REST:理解新時代的 API 設計
  4. 為什麼自定義 404 頁面需要同時支持 API 和 HTML:新手指南
  5. 前後端分離中的路由與錯誤處理:新手指南
  6. 設計後端 API 的 404 錯誤處理:新手指南
  7. 前端與後端的 HTTP 請求與響應協議
  8. Django 中自定義 404 專案架構的最佳實踐
  9. 深入理解 Django 中的自定義 404 views 函數處理解析
  10. Django 的 handler404:自定義 404 錯誤頁面的核心
  11. Django 的 render 函數與 status 參數:為什麼重要?
  12. 使用 Accept 判斷請求格式:如何實現靈活的錯誤處理?
  13. 使用 Esbuild 搭建 Vue 開發環境的指南
  14. 新手入門:TailwindCSS 與 DaisyUI 的整合指南
  15. Django 靜態文件管理:static 與 staticfiles 完整指南 👈 所在位置
  16. 使用 WhiteNoise 簡化 Django 靜態文件管理:新手入門指南
  17. Vue 與 Django 整合:從編輯到部署的完整指南
  18. Django 與 Vue 的專案目錄與設計流程指南
  19. Django + Vue 前後端分離架構:後端路由渲染解析
  20. Vue 3 應用的主入口詳解:如何初始化應用
  21. 探索 Vue 應用的根組件:App.vue 的角色與設計
  22. Vue.js 單頁應用(SPA)邏輯與運作流程詳解
  23. 新手指南:使用 Axios 實現高效的 HTTP 請求
  24. 在 Vue 中處理 404 錯誤組件(component)設計:新手指南
  25. Vue Router 新手指南:設置 404 錯誤頁面

Django 是一個功能強大的 Web 框架,支持靜態文件的高效管理。

然而,靜態文件的開發與生產環境需求不同,需要採取不同的處理方式。

本指南將幫助新手了解 staticstaticfiles 的核心概念、區別以及實際應用,確保靜態文件在開發與部署環境中能正常運作。


staticstaticfiles 的區別

什麼是 static

  • 靜態文件的源目錄:每個應用的 static/ 目錄是專為該應用設計的,用於存放 CSS、JS、圖片等資源。
  • 適用於開發環境:當 DEBUG=True 時,Django 的內建伺服器會自動從這些目錄提供文件。

範例

假設有以下目錄結構:

app1/
    static/
        css/
            style.css
app2/
    static/
        js/
            script.js

在模板中,可以通過 {% static %} 標籤加載靜態文件:

<link rel="stylesheet" href="{% static 'css/style.css' %}">

DEBUG=True 時,Django 會從 app1/static/css/style.css 提供該文件。


什麼是 staticfiles

  • 靜態文件的統一存放目錄:生產環境中,所有應用的靜態文件會集中到 STATIC_ROOT 指定的目錄中,通常被稱為 staticfiles
  • 生產環境專用:當執行 collectstatic 命令時,Django 將所有應用的 static/ 文件以及 STATICFILES_DIRS 中指定的文件複製到 STATIC_ROOT
  • 需外部伺服器提供服務:例如 Nginx 或 Apache。

範例

假設 STATIC_ROOT 設置為 staticfiles/,執行 collectstatic 後:

staticfiles/
    css/
        style.css
    js/
        script.js

生產環境中,外部伺服器會直接從 staticfiles/ 提供靜態文件,而不再依賴分散的應用目錄。


配置靜態文件

settings.py 配置

開發環境

STATIC_URL = '/static/'
  • STATIC_URL:定義靜態文件的 URL 路徑前綴,用於模板中靜態文件的引用。

生產環境

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / "staticfiles"
  • STATIC_ROOT:指定 collectstatic 收集靜態文件的目錄。

收集靜態文件

執行以下命令:

python manage.py collectstatic

Django 會掃描所有應用的 static/ 目錄,以及 STATICFILES_DIRS 中的路徑,將文件複製到 STATIC_ROOT


如何使用 staticfiles 在生產環境提供服務?

外部伺服器配置

通常使用 Nginx 或 Apache 等伺服器來處理 STATIC_ROOT 目錄中的靜態文件。

Nginx 配置範例

location /static/ {
    alias /path/to/staticfiles/;
}

臨時使用 Django 提供靜態文件

如果沒有配置外部伺服器,可以暫時使用 Django 處理靜態文件。

更新 urls.py

from django.conf import settings
from django.conf.urls.static import static

if not settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

staticstaticfiles 的對比

特性staticstaticfiles (STATIC_ROOT)
位置每個應用的 static/ 目錄部署時的統一目錄,由 collectstatic 生成
用途開發環境直接調用(DEBUG=True生產環境用,需外部伺服器提供
管理命令關聯無需額外處理需通過 collectstatic 將文件集中到此目錄
使用場景開發時 Django 內建伺服器自動服務靜態文件部署到生產環境時,由外部伺服器提供文件

部署靜態文件的完整流程

1. 開發環境

  1. 配置 STATIC_URL
  2. 在應用的 static/ 目錄中存放靜態文件。
  3. 使用 {% static %} 標籤引用文件。

生產環境

  1. 配置 STATIC_URLSTATIC_ROOT
  2. 執行 python manage.py collectstatic
  3. 使用外部伺服器(如 Nginx)處理 STATIC_ROOT 中的靜態文件。

注意事項與最佳實踐

  1. 開發與生產環境的區別
    • 開發環境中,Django 直接服務 static/ 文件。
    • 生產環境中,所有靜態文件應該集中到 STATIC_ROOT,並由外部伺服器提供。
  2. 安全性建議
    • 不建議在生產環境中讓 Django 提供靜態文件服務,應使用專門的靜態文件伺服器。
  3. 測試環境建議
    • 測試環境可暫時使用 Django 處理靜態文件,確保功能正確。

結語

靜態文件的管理是 Django 開發與部署的重要一環。

通過正確區分和配置 staticstaticfiles,您可以在開發環境中快速迭代設計,並在生產環境中高效提供靜態資源。

希望本指南能幫助您更清晰地理解並正確應用這些功能! 🎉

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *