Django中管理靜態文件:全面指南

在本教程中,我們將探討Django中的靜態文件是什麼,有效管理它們的好處,它們在Web應用程序中的作用,並設置一個示範項目來說明如何使用不同的方法和工具管理和提供靜態文件。

Table of Contents

Django是一個高階的Python網頁開發框架,為網頁開發者提供了一個強大的工具包,以便快速且有效地創建網頁應用程式。

雖然Django非常適合快速高效地創建網絡應用,但同樣重要的是要注意您開發的網絡應用程序的外觀和感覺。為了做到這一點,您需要學習如何管理支持並提供應用程序外觀和感覺的資產。

Django中的靜態文件

在Django中,靜態文件是那些未經服務器任何處理直接提供給客戶端的文件。

這些通常包括CSS、JavaScript文件、圖像、圖標、字體和其他對您的網絡應用程序外觀和感覺必要的資產。

Django提供了有效管理和提供這些靜態文件的機制,確保用戶體驗順暢。

高效管理靜態文件

為了確保您的網絡應用程序的用戶有一個良好的用戶體驗並且應用程序按預期運行,您必須高效地管理靜態文件。

適當地組織和緩存靜態文件將確保快速的頁面加載時間,並提高響應性,增強整體用戶滿意度。

Django提供了各種工具和約定來幫助處理靜態文件。

網絡應用程序中靜態文件的目的

靜態文件非常重要,因為它們定義了網絡應用程序的外觀和感覺。它們定義了應用程序中的組件如何被樣式化,它們如何響應用戶交互,以及最終用戶訪問特定網絡應用程序時看到什麼。

當您有效地提供靜態文件時,您將能夠創建一個視覺上吸引人且反應靈敏的用戶界面,使應用程序更具吸引力和用戶友好性。

設置演示項目

為了說明Django中靜態文件管理的概念,我們將從零開始設置一個演示項目。

該項目將包括創建一個Django項目、配置靜態文件設置以及將靜態文件整合到一個簡單的Web應用程序中。

通過跟隨演示項目,您將獲得管理Django中靜態文件的實際經驗,並理解它們在Web開發中的重要性。

為了本教程的目的,我們將創建一個登陸頁面,以便當用戶訪問我們項目的首頁時,他們將看到一個經過樣式處理的標題歡迎他們訪問網站。它還將使用JavaScript顯示今天的日期,我們還將提供一張圖片以完成頁面。

創建項目目錄

讓我們開始通過以下命令創建一個將保存演示項目的目錄:

mkdir sitepoint_django_static_tut

創建虛擬環境

建議您創建並將新項目隔離在虛擬環境中。這意味著每個項目將有自己的依賴關係,而不會影響全局Python安裝。

我們將使用virtualenv套件來建立它。如果您的開發環境中尚未安裝此套件,請使用pip install virtualenv進行安裝,並使用以下命令創建虛擬環境:

virtualenv myenv

上述命令會創建一個名為myenv的虛擬環境。要使用此虛擬環境,您必須先將其啟用:

Linux/macOS:

. myenv/bin/activate

Windows:

. myenv\Scripts\activate

安裝依賴

一旦虛擬環境處於活動狀態,您現在可以繼續安裝項目的依賴項。首先,我們將安裝Django。隨著我們進入展示其用法的各個部分,我們將安裝其他依賴項:

pip install Django

這將安裝撰寫時最新的穩定版Django,即版本5.0。

創建Django項目

成功安裝Django後,您現在可以使用Django管理命令。讓我們使用這些命令在虛擬環境中創建一個Django項目:

django-admin startproject sitepoint_django .

上述命令將創建一個名為sitepoint_django的Django項目,末尾的點表示我們打算在當前目錄中創建該項目。

創建示範應用

為了說明靜態文件管理的各種概念,我們需要在項目中創建至少一個Django應用:

python manage.py startapp  static_demo

這將在我們的項目中創建一個名為 `static_demo` 的新應用。為了讓項目識別它,我們必須將其添加到項目的 `settings.py` 文件中的已安裝應用設置中。打開 `sitepoint_django/settings.py`,前往 `INSTALLED_APPS` 設置,並在列表底部添加 `static_demo.apps.StaticDemoConfig`,如下所示:

# sitepoint_django/settings.py

INSTALLED_APPS = [
    # 其他應用
    'static_demo.apps.StaticDemoConfig',
]

創建首頁模板

我們將在用戶訪問網站首頁時渲染一些HTML。在 `static_demo` 應用中,創建一個 `templates` 目錄,並在其中創建另一個目錄並命名為 `static_demo`。在這個目錄中,創建一個模板並命名為 `index.html`,因此路徑將是 `static_demo/templates/static_demo/index.html`。

將以下代碼放入 `index.html`:

<!-- static_demo/index.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sitepoint Django Tutorial</title>
</head>
<body>
    <h2>Hello there, welcome to our great site!</h2>
</body>
</html>

創建索引視圖

為了讓模板在用戶訪問應用首頁時顯示,我們需要創建一個視圖函數,該函數將被觸發以渲染 `home.html` 模板。打開 `static_demo/views.py` 文件並輸入以下代碼:

# static_demo/views.py

from django.shortcuts import render

def index(request):
    return render(request, "static_demo/home.html")

創建 static_demo URL 文件

我們希望在static_demo應用程式中的索引檢視能在用戶訪問我們的網站時呈現首頁。因此,我們將為該檢視函數創建一個URL方案以渲染首頁。為此,我們需要在static_demo應用程式中創建一個urls.py文件,並將static_demo的URL文件連接到項目的URL文件。

因此,在static_demo應用程式中,創建一個文件並將其命名為urls.py,並在其中添加以下代碼:

# static_demo/urls.py

from django.urls import path
from .import views

app_name = 'static_demo'

urlpatterns = [
    path('', views.index, name="index"),
]

上述代碼為我們項目的索引檢視創建了一個URL,因此如果用戶訪問類似http://oursite.com/的網址,或在開發中訪問http://127.0.0.1:8000,將會調用索引檢視來回應。

接下來,我們將其添加到項目的URL文件中。打開sitepoint_django/urls.py文件並添加以下代碼:

# sitepoint_django/urls.py

from django.contrib import admin
from django.urls import path, include # 添加include的導入

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('static_demo.urls')), # 添加此行
]

上述代碼對默認的urls.py文件進行了一些更改。我們添加了include函數的導入,這告訴Django我們正在包含static_demo.urls

測試項目

至此,項目的初始配置已完成。讓我們運行開發服務器以檢查一切是否順利連接。

使用以下命令運行項目:

python manage.py runserver

若一切設置正確,您應能訪問 http://127.0.0.1:8000。您將看到一些未經風格設計的文字,歡迎您來到本站。

開發環境中靜態文件的服務

為了給頁面添加風格、日期顯示的JavaScript以及圖片,我們需要對項目進行修改。讓我們逐步進行,看看如何在不同的方式下服務不同的靜態文件,從開發環境開始。

設置靜態文件目錄

Django 建議所有靜態資產應按應用程序管理:即,特定應用程序所需的所有CSS、JS和圖像應位於該應用程序的範圍內。因此,讓我們更新 static_demo 應用程序,創建一個名為 static 的目錄,在其中再創建一個名為 static_demo 的目錄。然後在 static_demo 目錄中創建三個更多的目錄:cssjsimages。最終,我們將擁有一個類似於下方的結構:

static_demo/
    └── static/
        └── static_demo/
            ├── css/
            ├── js/
            └── images/

您之所以要在 static 目錄中創建 static_demo 目錄,是為了幫助您對靜態資產進行命名空間。如果您有不止一個應用程序,並且兩個應用程序中的CSS都命名為 styles.css,Django 將只與它找到的第一個樣式表工作,因為它無法區分其他樣式表。因此,我們對它們進行命名空間化,以便Django能夠知道我們在模板中引用的是哪個資產文件。

創建靜態文件

在此步驟中,我們將設置最基本的靜態資產,以展示如何在開發中提供這些文件。

js目錄下,創建一個文件並命名為todays_date.js,添加以下代碼:

/* static_demo/js/todays_date.js */

let formattedDate = new Date().toLocaleDateString();

document.getElementById('todaysDate').innerText = `The date today is ${formattedDate}`;

上述代碼從JavaScript獲取今天的日期,將其格式化為字符串,並在具有todaysDate ID的div中顯示。

css目錄下,創建一個文件,命名為styles.css,並添加以下代碼:

/* static_demo/css/styles.css */

body {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    margin: 0;
}

h2 {
    font-size: 24px; 
    color: green;
}

上述代碼使用Flexbox佈局將頁面上的所有項目水平和垂直居中。同時,將H2元素的字體大小設置為24px,顏色設為綠色。

對於圖像,您可以使用任何喜歡的圖像。只需將某個圖像複製到images目錄中,並記下其名稱。

配置靜態文件設置

要在開發中提供靜態文件,需要在Django的settings.py文件中設置多項內容。打開sitepoint_django/settings.py文件,檢查是否已包含以下設置:

# sitepoint_django/settings.py`

DEBUG=True

在開發過程中,通常建議在Django專案設定中將DEBUG設為True。此設定啟用了多種除錯功能,包括詳細的錯誤訊息和堆疊追蹤,這對於開發期間診斷和修復問題極為寶貴。

此外,當DEBUG設為True時,django.contrib.staticfiles應用程式會自動從每個應用程式的static目錄提供靜態檔案。這種行為簡化了開發流程,消除了手動配置提供靜態檔案的需求。

INSTALLED_APPS設定中,檢查是否已添加django.contrib.staticfiles。如果沒有,將其添加到專案中您已有的應用程式之上。例如,在本專案中,將其添加在static_demo應用程式字串之上,如下所示:

# sitepoint_django/settings.py

INSTALLED_APPS = [

    'django.contrib.staticfiles',
    'static_demo.apps.StaticDemoConfig',
]

Django提供的django.contrib.staticfiles應用程式對於開發期間提供靜態檔案至關重要。預設情況下,它會遍歷您的專案應用程式以定位每個應用程式內的靜態檔案目錄。然而,如果您有與任何特定應用程式無關的額外靜態資產,您仍可以通過在專案的settings.py檔案中設定STATICFILES_DIRS來使其對django.contrib.staticfiles可訪問。此設定允許您指定靜態檔案所在的額外目錄。例如:

# sitepoint_django/settings.py

STATICFILES_DIRS = [
    "/dir/with/staticfiles/static",
    "/someother/dir/static",
    "/home/example.com/static",
]

除了DEBUGSTATICFILES_DIRS之外,另一个重要的设置项是STATIC_URL,应包含在您的Django项目设置文件中。虽然Django为STATIC_URL提供了一个默认值,但如果该设置尚未定义,您可以在settings.py文件中明确指定它。

STATIC_URL设置指定了静态资产将被服务的基URL。例如,设置STATIC_URL = "static/"指示Django从/static/ URL路径提供静态资产。这意味着,例如,位于static_demo应用中的样式文件将可通过类似http://127.0.0.1:8000/static/static_demo/css/styles.css的URL访问。

更新模板

为了在模板中使用静态文件,我们需要通过以下HTML更新模板:




{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sitepoint Django Tutorial</title>

    
    <link rel="stylesheet" href="{% static 'static_demo/css/styles.css'%}"> 
</head>
<body>
    <h2>Hello there, welcome to our great site</h2>
    <p id="todaysDate"></p>
    
    <img src="{% static 'static_demo/images/flowerImage.png' %}" alt="Flower Image"> 

    
    <script src="{% static 'static_demo/js/todays_date.js' %}"></script>
</body>
</html>

该模板更新引入了一个新标签:{% load static %}。此标签加载了Django模板引擎提供的静态文件处理功能。在Django模板文件中包含此标签使我们能够使用与静态文件相关的模板标签和过滤器。

例如,在模板中使用它使我們能夠在HTML元素中引用圖像、CSS和JS等靜態文件。使用它還能讓Django為這些靜態資產生成URL:

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

<img src="{% static 'static_demo/images/flowerImage.png' %}" alt="Flower Image"> 

<script src="{% static 'static_demo/js/todays_date.js' %}"></script>

設定好這些設置並更新模板後,我們應該運行項目,檢查文件是否在開發中被提供。使用以下命令運行項目:

python manage.py runserver

如果一切設置正確,開發服務器應該運行在http://127.0.0.1:8000。如果我們訪問該鏈接,應該會看到類似以下頁面。

出現類似圖像表明靜態文件已正確應用。

需要注意的是,在Django開發中,當項目設置中DEBUG=True,且django.contrib.staticfiles已啟用時,這允許Django的開發服務器(runserver)提供靜態文件。在此情況下,對靜態文件(如CSS、JavaScript或圖像)所做的任何更改都會被Django自動檢測並應用。這一無縫過程大大簡化了開發,因為您將立即看到更改的效果,無需手動刷新或重啟服務器。

然而,在生產環境中,提供靜態文件通常涉及使用單獨的Web伺服器或CDN。在此情況下,Django可能不會自動檢測並應用對靜態文件的更改,這就需要手動介入以確保用戶能夠獲得更新後的文件。此外,如果您選擇使用不同的方法(如django.views.static.serve()視圖)手動提供靜態文件,自動檢測和應用更改可能不會發生,您可能需要實施自己的機制來處理靜態文件更新。

使用WhiteNoise提供靜態文件

在開發過程中,django.contrib.staticfiles簡化了提供靜態資產的過程,確保您進行更改時能夠無縫更新。

然而,當過渡到生產環境時,必須禁用DEBUG=True等設置,靜態文件可能由CDN或其他伺服器提供。這就需要一個能夠橋接兩種環境的解決方案——在開發期間平滑地提供文件,同時精確反映生產環境。

這時,WhiteNoise套件登場了。WhiteNoise旨在無縫整合Django,為開發和生產環境中的靜態文件提供了一個強大的解決方案,提供了一個統一的方法,確保在部署階段的一致性和可靠性。讓我們來探索WhiteNoise。

在Django中安裝和配置WhiteNoise

開始使用WhiteNoise非常簡單。在本節中,我們將引導您完成安裝過程,並指導您如何在Django項目中配置WhiteNoise。

我們安裝WhiteNoise的方式如下:

pip install whitenoise

安裝成功後,前往sitepoint_django/settings.py,向下滾動至底部,找到STATIC_URL設定。在其下方,添加STATIC_ROOT設定:

# sitepoint_django/settings.py

STATIC_ROOT = BASEDIR / "staticfiles"

上述設定指示Django,當運行collectstatic時,專案中所有應用程式的所有靜態資產將被收集並存儲到名為staticfiles的目錄中。

接下來,運行collectstatic管理命令:

python manage.py collectstatic

要啟用WhiteNoise,您必須將其添加到MIDDLEWARE設定列表中,編輯settings.py文件,並在Django的SecurityMiddleware之後及所有其他中間件之前添加WhiteNoise中間件:

# sitepoint_django/settings.py

MIDDLEWARE = [
    # ...
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    # ...
]

在開發中使用WhiteNoise

僅憑上述步驟,WhiteNoise便能在生產環境中為您提供靜態文件。但如果您在此時運行專案,Django開發伺服器將自動接管靜態文件處理。為了在開發和生產中獲得類似的行為,最好也在開發中使用它來提供文件。

為此,我們將禁用Django的靜態文件處理功能,並允許WhiteNoise接管,只需編輯設置文件,將WhiteNoise添加到INSTALLED_APPS列表中,並將其置於django.contrib.staticfiles之上:

# sitepoint_django/settings.py

INSTALLED_APPS = [
    # ...
    "whitenoise.runserver_nostatic",
    "django.contrib.staticfiles",
    # ...
]

您還需要通過將其設置為False來禁用DEBUG:

# sitepoint_django/settings.py

DEBUG=False

完成這些步驟後,您可以無縫地使用WhiteNoise包提供您的靜態資產。

為了驗證WhiteNoise確實在提供您的文件,您可以從INSTALLED_APPS設置列表中移除或註釋掉django.contrib.staticfiles選項。但需要注意的是,移除django.contrib.staticfiles將使一些靜態文件管理命令不可用,例如collectstatic命令。此命令對於從您的應用中收集並整合靜態文件到單一目錄,以便在生產環境中高效提供服務至關重要。

高級WhiteNoise配置選項

雖然上述步驟足以應對大多數情況,但WhiteNoise還提供了一些額外的配置選項。例如,您可以為您的專案添加壓縮和緩存支持。要啟用它,請打開sitepoint_django/settings.py文件並添加以下設置:

# sitepoint_django/settings.py

STORAGES = {
    # ...
    "staticfiles": {
        "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
    },
}

上述設置將確保WhiteNoise壓縮並對靜態文件進行哈希處理以生成唯一名稱,因此它們將被安全地緩存。

在共享主機環境中使用WhiteNoise

共享主機是一種網絡托管服務,其中多個網站托管在單個物理服務器上。在這種設置中,磁盤空間、帶寬和處理能力等資源在多個用戶之間共享,使其成為托管小型到中型網站的經濟有效選擇。

共享主機環境通常由托管提供商管理,他們負責服務器維護、安全性和技術支持,使網站所有者能夠專注於構建和管理他們的網站,而無需擔心服務器管理任務。

在共享主機中管理靜態文件的挑戰

雖然共享主機為許多網站提供了一種經濟且方便的托管解決方案,但它與其他類型的托管(如虛擬私有服務器(VPS)或專用服務器)相比也有局限性。這些限制包括以下內容:

  • 對伺服器配置和設定的限制,限制了自訂伺服器軟體或安裝額外工具的能力。

  • 資源限制,如磁碟空間,也扮演重要角色,因為可能存在可用於向訪客提供這些檔案的頻寬量的限制。

  • 在共享主機中,效能可能是另一個挑戰,因為與其他用戶共享資源可能導致靜態檔案的載入時間變慢,尤其是在流量高峰或資源使用率高時期。

配置使用WhiteNoise

WhiteNoise是一個Python套件,它與Django無縫整合,使其成為共享主機環境中提供靜態檔案的理想選擇。與ApacheNginx等其他軟體安裝不同,這些可能不允許在某些主機環境中使用,WhiteNoise可以輕鬆地與您的其他項目套件一起安裝。

透過配置Django使用WhiteNoise,您可以高效地直接從Django應用程式提供靜態檔案,無需額外的伺服器軟體。這簡化了設定過程,並確保與廣泛的託管服務商兼容。

大多數共享託管服務商提供cPanel,允許您進行伺服器配置和檔案上傳。因此,一旦您上傳了檔案,您可以對專案的settings.py檔案進行以下更改:

# sitepoint_django/settings.py

STATIC_URL='static/'

# 將username替換為您的cpanel使用者名稱
# 如果您正在處理主域名如https://example.com,請使用public_html
STATIC_ROOT='/home/username/public_html/static'

# 或者 
# 如果您正在處理子域名如https://subdomain.example.com,請使用資料夾名稱
STATIC_ROOT='/home/username/subdomain.mydomain.com/static'

設定好這些後,您只需運行collectstatic命令,您的靜態檔案將會被收集到上述任一STATIC_ROOT目錄中,具體取決於域名。

從AWS S3提供靜態檔案

Amazon簡單儲存服務(S3)是Amazon Web Services(AWS)提供的一項可擴展物件儲存服務。它允許用戶創建稱為桶的儲存空間,您可以在其中儲存各種類型的數據,如文檔、圖像、視頻,以及本教程中特別提到的靜態檔案。

AWS提供多項服務的免費方案,包括Amazon S3。免費方案允許用戶在特定時間內或達到特定使用量限制前,無需支付費用即可開始使用AWS服務。要開始使用,您可以註冊S3免費方案。不過,完成註冊流程需要提供付款資訊。

建立S3儲存桶

要建立儲存桶,請前往S3儀表板並點擊建立儲存桶按鈕。

為儲存桶提供一個獨特的DNS相容名稱。您可以選擇性地選擇一個靠近您或您的用戶的地區。

啟用儲存桶的ACL。

透過關閉封鎖所有公開存取來啟用儲存桶的公開存取。

成功建立後,您應該會在S3主頁上看到您的儲存桶。

啟用IAM存取

建立儲存桶後,您可以使用根用戶存取儲存桶,但AWS建議您建立IAM(身份存取管理)用戶群組,並將其存取權限限制於特定儲存桶。

建立IAM群組

前往IAM主頁並在側邊欄選擇用戶群組。然後點擊建立群組按鈕。為群組指定一個名稱。

接著在附加許可政策下,搜尋S3並分配AmazonS3FullAccess,然後點擊建立群組按鈕。

建立IAM用戶

在IAM頁面上,於左側面板選擇用戶,然後點擊建立用戶按鈕。

為IAM用戶命名後,點擊下一步按鈕。

設定權限選項下,保持將用戶加入群組為選中狀態,接著前往用戶群組,選擇先前建立的用戶群組,然後點擊下一步按鈕。

審查後點擊建立用戶

現在點擊用戶名以查看用戶詳情。點擊安全憑證標籤,接著點擊建立存取金鑰。選擇本地代碼,然後點擊下一步按鈕。

之後,點擊建立存取金鑰按鈕。您可以將金鑰複製到您的.env文件中(如果有的話),或者下載CSV文件以供日後使用。

配置Django使用AWS S3存儲靜態文件

在建立S3桶後,我們需要配置項目以從S3提供文件。在上一節中,我們配置了WhiteNoise來提供我們的靜態資產。我們需要禁用WhiteNoise,以便能夠從S3提供資產。為此,請前往sitepoint_django/settings.py文件,並註釋掉相關的代碼行:

# sitepoint_django/settings.py

INSTALLED_APPS = [
    # ...
    # "whitenoise.runserver_nostatic",
    # ...
]

MIDDLEWARE = [
    # ...
    # "whitenoise.middleware.WhiteNoiseMiddleware",
    # ...
]

# STORAGES = {
#     "staticfiles": {
#         "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
#     },
# }

上述代碼將我們為WhiteNoise設置的所有配置進行了註釋。

安裝套件

為了使專案能夠與S3協作,我們需要安裝兩個套件:boto3和django-storages。boto3提供了與AWS服務互動的低階Python API,而django-storages則擴展了Django的檔案儲存能力,使其能夠與Amazon S3等雲端儲存供應商整合,讓您能夠在Django應用程式中無縫管理並提供靜態和媒體檔案:

pip install boto3 django-storages

配置設定

為了讓我們的專案能夠從S3提供檔案,我們需要在settings.py檔案中進行一些更改,並更新以下代碼:

# sitepoint_django/settings.py
import os  # 首先導入 os 模塊

# S3 儲存設定
STORAGES = {
    'staticfiles': {
        'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
        'OPTIONS': {
            'bucket_name': os.getenv('AWS_STORAGE_BUCKET_NAME'),
            'location': 'static',
            'querystring_auth': False,
        },
    }
}

上述設定創建了一個 STORAGES 字典,作為定義項目內使用的各種儲存後端的集中配置容器。

值得注意的是,此設定僅適用於 Django 4.2 及以上版本。對於較早版本,請查閱文檔。

在上述代碼中,我們有一個 staticfiles 設定,用於識別管理靜態文件的儲存配置。

STORAGES 設定之後,我們需要在設定文件中添加一些 AWS 特定的設定,因此請滾動到找到 STATIC_URL 設定的部分,並進行以下更改:

# sitepoint_django/settings.py

USE_S3 = os.getenv('USE_S3')

if USE_S3:
    AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
    AWS_S3_OBJECT_PARAMETERS = {
        "CacheControl": "max-age=2592000",
    }

else:
    STATIC_URL = 'static/'
    STATIC_ROOT = BASE_DIR / 'staticfiles'

將靜態文件上傳至 S3

設定到位後,下一項任務是將您的靜態文件上傳到 S3 桶。您可以通過運行 collectstatic 來完成這一操作:

python manage.py collectstatic  --no-input

這將收集我們項目應用中的所有靜態文件,將它們移動到 S3 桶中,並根據 STORAGES 字典將它們放置在一個 static 文件夾中。--no-input 標誌指示 Django 以非交互模式運行,繞過任何用戶輸入提示。

使用Django時,將自動進行靜態文件收集流程,無需用戶手動干預。

運行項目

設置完成後,即可運行項目。讓我們在開發環境中運行項目,並從S3桶提供文件:

python manage.py runserver

為驗證確實從S3提供文件,可檢視首頁的源代碼:

<link rel="stylesheet" href="https://sitepoint-django-static.s3.amazonaws.com/static/static_demo/css/styles.css">

<img src="https://sitepoint-django-static.s3.amazonaws.com/static/static_demo/images/flowerImage.png" alt="Flower Image">

<script src="https://sitepoint-django-static.s3.amazonaws.com/static/static_demo/js/todays_date.js"></script>

查看HTML元素顯示,URL確實指向S3桶。

結論

總結來說,管理Django中的靜態文件需評估項目需求、可擴展性及主機環境限制,以選擇最合適的方法。

例如,WhiteNoise中間件為共享主機環境中提供高效靜態文件服務的解決方案,此類環境資源受限且服務器訪問有限。

通過適當配置Django設置並利用WhiteNoise等工具,開發者能確保在任何主機環境下靜態文件的可靠與優化服務。每種方法各有優缺點,需仔細評估以滿足項目特定需求,提供無縫用戶體驗。

我們已涵蓋幾個關鍵點:

靜態檔案管理方法。我們已討論了多種方法,包括本地伺服靜態檔案、使用Django內建的開發伺服器、利用第三方儲存解決方案如Amazon S3,以及使用WhiteNoise等套件來伺服檔案。每種方法都有其優點和考量,視乎可擴展性、效能和部署的便利性等因素。

常見設定與指令:

  • STATIC_ROOT:指定收集的靜態檔案將儲存的目錄。
  • STATIC_URL:定義透過網頁伺服器存取靜態檔案的基本URL。
  • STATICFILES_DIRS:指定包含靜態資產的其他目錄。
  • STATICFILES_STORAGE:配置處理靜態檔案的儲存後端。
  • collectstatic:將所有應用程式目錄中的靜態資產收集到STATIC_ROOT

進一步閱讀:

Source:
https://www.sitepoint.com/managing-static-files-in-django-a-comprehensive-guide/