本文為 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 的功能路由。
通過正確配置靜態與媒體檔案,開發者能夠輕鬆管理專案中的各類檔案,確保專案的穩定運行與高效開發。