Django 專案中靜態與媒體檔案的正確配置指南

更新日期: 2024 年 12 月 16 日

在 Django 專案中,處理靜態檔案與媒體檔案是開發者必須掌握的基本技能。

正確配置相關參數,能夠確保靜態與媒體檔案能被正確加載與展示。

本文將詳細說明如何在 Django 中設定靜態檔案與媒體檔案,並解釋全局與局部 urls.py 的分工與用途。


settings.pyurls.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/           <-- 媒體檔案資料夾

在這種情況下:

  1. 靜態與媒體檔案的配置應在 core/settings.py 中進行
  2. 靜態與媒體檔案的路由應在 core/urls.py 中進行配置
  3. user/urls.py 等局部路由文件僅用於該 App 的功能路徑設定,無需涉及靜態或媒體檔案的處理

注意事項

  1. 部署環境中的靜態檔案處理
    • 開發模式下,Django 能夠直接提供靜態與媒體檔案服務;但在生產環境中,通常需要使用 Web 伺服器(如 Nginx 或 Apache)來處理這些檔案。
  2. DEBUG 模式的安全性
    • 僅在開發環境下使用 DEBUG=True,生產環境中應設為 False,並確保靜態檔案與媒體檔案由 Web 伺服器負責處理。

總結

  • settings.py 是靜態檔案與媒體檔案配置的核心位置,需設置 STATIC_URLSTATICFILES_DIRSMEDIA_URLMEDIA_ROOT 等參數。
  • 全局的 urls.py 負責映射靜態與媒體檔案的 URL,需要根據開發環境使用 static() 函數進行配置。
  • 局部的 urls.py 不涉及靜態與媒體檔案服務的配置,僅負責該 App 的功能路由。

通過正確配置靜態與媒體檔案,開發者能夠輕鬆管理專案中的各類檔案,確保專案的穩定運行與高效開發。

Similar Posts