Django資源文件配置

資源文件配置

資源文件配置分爲靜態資源媒體資源。靜態資源的配置方式由配置屬性STATIC_URL、STATICFILES_DIRS和STATIC_ROOT進行配置;媒體資源的配置方式有配置屬性MEDIA_URL和MEDIA_ROOT決定。

  • 靜態資源: 指的是網站中不會改變的文件。在一般的應用程序中,靜態資源包括CSS文件、Javascript文件以及圖片等資源文件。
  • 媒體資源: 對於一些經常變動的資源,通常將其放在媒體資源文件夾,如用戶頭像、歌曲文件等。

靜態資源和媒體資源可以同時存在,兩者可以獨立運行,互不影響。

1.1、靜態資源

1.1.1 資源路由—STATIC_URL

Django的默認配置信息如下:
在這裏插入圖片描述上述配置是設置靜態文件的路由地址,其作用是通過瀏覽器訪問Django的靜態資源。默認情況下,Django只能識別項目應用App的static文件夾裏面的靜態資源。當項目啓動時,Django會從項目應用App裏面查找相關的資源文件,查找功能主要由App列表INSTALL_APPS的staticfiles實現。在index(應用名稱)中手動創建static文件夾並在文件夾中放入靜態文件。
Django在調試模式(DEBUG=True)下只能識別項目應用App的static文件夾裏面的靜態資源,如果該文件夾改爲其他名字,Django就無法識別,若static文件夾放在MyDjango的項目目錄下,則Django也是無法識別的。也就是說,資源路由STATIC_URL的值爲/static/,則瀏覽器訪問靜態資源的網站必須爲static,否則無法訪問,並且Django在調試模式(DEBUG=True)下只能識別App目錄下的static文件夾。

1.1.2 資源集合—STATICFILES_DIRS

存在感: 解決STATIC_URL的不足。由於STATIC_URL的特殊性,在開發中會造成諸多不便,比如將靜態文件夾存放在項目的根目錄以及定義多個靜態文件夾等。
在配置文件settings.py中手動設置STATICFILES_DIRS屬性。該屬性以列列表形式表示,設置方式如下:

STATICFILES_DIRS = [
# 設置根目錄的靜態資源文件夾static
os.path.join(BASE_DIR,'static'),
#設置App(index)的靜態資源文件夾MyStatic
os.path.join(BASE_DIR,'index/Mystatic'),
]

此時項目中App應用(index)文件下的MyStatic和static以及項目根目錄下的static文件夾都可以存放靜態資源。瀏覽器訪問的時候,圖片路徑(靜態資源)皆爲http://127.0.0.1:8000/static/xxx.jpg。若將STATIC_URL的值改爲AllStatic,再次重啓項目,則在瀏覽器上圖片資源路徑的static則改爲Allstatic。

1.1.3 資源部署—STATIC_ROOT

作用是在服務器上部署項目,實現服務器和項目之間的映射。STATIC_ROOT主要收集整個項目的靜態資源並放在一個新的文件夾,然後由該文件夾與服務器之間構建映射關係。STATIC_ROOT配置如下:

STATIC_ROOT = os.path.join(BASE_DIR,'AllStatic')

當項目的配置屬性DEBUG設爲True的時候,Django會自動提供靜態文件代理服務,此時整個項目處於開發階段,因此無需使用STATIC_ROOT。當配置屬性DEBUG設爲False的時候,意味着項目進入生產環境,Django不再提供靜態文件代理服務,此時需要在項目的配置文件中設置STATIC_ROOT。
設置STATIC_ROOT需要使用Django操作指令collectstatic來收集所有靜態資源,這些靜態資源都會保存STATIC_ROOT所設置的文件夾裏。

1.2、媒體資源

在項目的根目錄下手動創建media文件夾。

1.2.1、資源路由—MEDIA_URL
# 設置媒體路由地址信息
MEDIA_URL = '/media/'
1.2.2、獲取media文件夾在路徑信息—MEDIA_ROOT
# 獲取media文件夾的完整路徑信息
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

配置屬性設置後,還需要將media文件夾註冊到Django裏,讓Django知道如何找到媒體文件,否則無法在瀏覽器上訪問該文件夾的文件信息。此時需要打開MyDjango文件夾的urls.py文件,爲媒體文件夾media添加相應的路由地址,代碼如下:

from django.contrib import admin
from django.urls import path,re_path
# 導入項目應用index
from index.views import index

# 配置媒體文件夾media
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',index),
    # 配置媒體文件的路由地址
    re_path('media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT},name = 'media'),
]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章