Django 專案中靜態與媒體檔案的正確配置指南
更新日期: 2024 年 12 月 16 日
本文為 Django 圖片上傳功能系列教學,第 15 篇:
- Django 實現用戶圖片上傳功能:10 步驟詳細解析
- Django 圖片上傳功能完整代碼解析
- Django 模型中的三種主要關聯方式
- Django 中的 ImageField:簡單介紹與進階設定
- Django 中的 blank=True 和 null=True:深度解析
- Django Signals 的基礎入門
- 深入解析 Django 的 @receiver 裝飾器:原理與實踐
- Django 圖片上傳功能:信號執行函數設計解析
- 如何在 Django 中載入和使用信號(Signals)
- Django 模型建立後的必備步驟:執行 migrate
- 使用 Django 創建用戶個人資訊更新表單
- 如何使用 Django 更新用戶個人資料
- 深入了解 HTML 表單的 enctype=”multipart/form-data”
- Django 中媒體檔案處理:設定與執行解析
- Django 專案中靜態與媒體檔案的正確配置指南 👈 所在位置
- Django 動態讀取頭像:模板與上下文的最佳實踐
在 Django 專案中,處理靜態檔案與媒體檔案是開發者必須掌握的基本技能。
正確配置相關參數,能夠確保靜態與媒體檔案能被正確加載與展示。
本文將詳細說明如何在 Django 中設定靜態檔案與媒體檔案,並解釋全局與局部 urls.py
的分工與用途。
settings.py
與 urls.py
的定位
在 Django 專案中,全局的靜態檔案與媒體檔案配置應集中在核心目錄的 settings.py
和全局的 urls.py
中。
而各個 App 的路由僅處理該 App 的功能相關路徑,無需涉及靜態或媒體檔案的服務設定。
配置步驟
settings.py
中的靜態與媒體檔案設定
在專案的核心目錄 settings.py
中,加入以下配置:
靜態檔案設定
# 靜態檔案的 URL 與根目錄設定
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL
:靜態檔案的 URL 前綴。STATICFILES_DIRS
:存放靜態檔案的資料夾路徑(用於開發環境)。STATIC_ROOT
:靜態檔案收集後的存放路徑(用於部署時的collectstatic
指令)。
媒體檔案設定
# 媒體檔案的 URL 與根目錄設定
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL
:媒體檔案的 URL 前綴。MEDIA_ROOT
:媒體檔案的存放路徑。
全局 urls.py
中的靜態與媒體檔案路由設定
在全局的 urls.py
(通常位於專案核心目錄,例如 core/urls.py
)中,新增如下代碼:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# 其他路由配置
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
static()
函數僅在開發模式(DEBUG=True
)下使用,用於將MEDIA_URL
映射到MEDIA_ROOT
,從而提供媒體檔案的服務。- 注意:此配置不應放在任何 App 的局部
urls.py
中,因為靜態檔案與媒體檔案是全局性的配置。
確認專案結構
假設你的專案結構如下:
myproject/
core/
settings.py <-- 全局配置文件
urls.py <-- 全局路由文件
user/
urls.py <-- 局部路由文件(App 的路由)
manage.py
static/ <-- 靜態檔案資料夾
media/ <-- 媒體檔案資料夾
在這種情況下:
- 靜態與媒體檔案的配置應在
core/settings.py
中進行。 - 靜態與媒體檔案的路由應在
core/urls.py
中進行配置。 user/urls.py
等局部路由文件僅用於該 App 的功能路徑設定,無需涉及靜態或媒體檔案的處理。
注意事項
- 部署環境中的靜態檔案處理
- 開發模式下,Django 能夠直接提供靜態與媒體檔案服務;但在生產環境中,通常需要使用 Web 伺服器(如 Nginx 或 Apache)來處理這些檔案。
DEBUG
模式的安全性- 僅在開發環境下使用
DEBUG=True
,生產環境中應設為False
,並確保靜態檔案與媒體檔案由 Web 伺服器負責處理。
- 僅在開發環境下使用
總結
settings.py
是靜態檔案與媒體檔案配置的核心位置,需設置STATIC_URL
、STATICFILES_DIRS
、MEDIA_URL
與MEDIA_ROOT
等參數。- 全局的
urls.py
負責映射靜態與媒體檔案的 URL,需要根據開發環境使用static()
函數進行配置。 - 局部的
urls.py
不涉及靜態與媒體檔案服務的配置,僅負責該 App 的功能路由。
通過正確配置靜態與媒體檔案,開發者能夠輕鬆管理專案中的各類檔案,確保專案的穩定運行與高效開發。