Django中靜態(tài)文件之各個配置詳解

關(guān)于靜態(tài)文件的部分报腔,有興趣的可以去官網(wǎng)看看:
Django3.2 關(guān)于管理靜態(tài)文件 (不必糾結(jié)Django是哪個版本惩琉,關(guān)于靜態(tài)文件的配置的都一樣)
當(dāng)然庄撮,覺得官網(wǎng)介紹的太復(fù)雜的話壹粟,接下來可以看我寫的部分:

假設(shè)創(chuàng)建了一個名為myweb的項(xiàng)目蠢沿,那么項(xiàng)目文件目錄應(yīng)該是這樣的:

C:\Users\Administrator\Desktop>django-admin startproject myweb
C:\Users\Administrator\Desktop>cd myweb
C:\Users\Administrator\Desktop\myweb>tree /f
文件夾 PATH 列表
卷序列號為 000000C9 E6A5:0777
C:.
│  manage.py          #與manage.py同級的目錄就是當(dāng)前項(xiàng)目文件夾下
│
└─myweb
        settings.py
        urls.py
        wsgi.py
        __init__.py
關(guān)于靜態(tài)文件的配置部分在settings.py文件中進(jìn)行配置苛吱,那么屹电。。吃沪。
Django有哪些關(guān)于靜態(tài)文件的配置汤善?
  1. django.contrib.staticfiles:創(chuàng)建項(xiàng)目后,默認(rèn)就有票彪,作用是用來處理靜態(tài)文件的红淡,但是只針對于debug=true,如果debug=false時降铸,就無法正常使用了(之后會講如何正確加載靜態(tài)文件)在旱。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles'        #debug=true時,就由這里的配置處理靜態(tài)文件
]

2.STATIC_ROOT:這個是配置靜態(tài)文件存放目錄推掸,另外一個作用就是運(yùn)行收集靜態(tài)文件的命令(關(guān)于命令的部分后面會講)時桶蝎,最終靜態(tài)文件收集存放的位置驻仅,注意,這個配置只會在debug=false時生效(生產(chǎn)環(huán)境)(至于為什么之后會講)登渣。

    #vim settings.py    ->在settings.py中配置STATIC_ROOT
   STATIC_ROOT = os.path.join(BASE_DIR, 'static')    
   #指定當(dāng)前項(xiàng)目目錄下的static文件夾用于存放靜態(tài)文件
   # BASE_DIR指的是當(dāng)前項(xiàng)目的路徑噪服,Django會自動幫我們處理
   #os.path.join()會拼接后面的路徑
  1. STATIC_URL:毫無疑問,這個是我們在編寫HTML文件時胜茧,書寫靜態(tài)文件路徑時用到的粘优,例如我們在HTML文件中如果想加載某個靜態(tài)文件時,就需要寫出該文件的路徑竹揍,有了這個配置后敬飒,我們就不需要寫靜態(tài)文件的具體路徑
    #Django默認(rèn)配置
    STATIC_URL = '/static/'

4.STATICFILES_DIRS:在實(shí)際項(xiàng)目開發(fā)中邪铲,如果我們的靜態(tài)文件存放在一個或多個目錄時芬位,可以定義一個列表,用于存儲靜態(tài)文件带到,django默認(rèn)配置并沒有這個配置昧碉,如果需要,請自己定義揽惹,當(dāng)項(xiàng)目下存在一個或多個靜態(tài)資源的目錄時被饿,非常適合這樣定義。注意搪搏,這個配置只在debug=true時生效(開發(fā)環(huán)境)

  #vim settings.py    ->在settings.py中配置STATICFILES_DIRS
   STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'templates/frontweb/static'),
          os.path.join(BASE_DIR, 'static'), 
          BASE_DIR / "static",
          '/var/www/static/',     #絕對路徑狭握,非相對路徑
          ("downloads", "/opt/webfiles/stats"),    #給文件夾起別名
          #以上幾種方法均可

          os.path.join(BASE_DIR, '/static'), 
          #這種方式會找不到靜態(tài)文件,os.path.join()方法會自動拼接‘/’疯溺,因此一定要注意论颅,加了‘/’,就會出現(xiàn)找不到的情況
      ]
  • 注:這里我們可以看到STATIC_ROOTSTATICFILES_DIRS的作用實(shí)際上是類似的囱嫩,因此恃疯,這兩個配置并不需要同時定義,在開發(fā)時墨闲,我們可能會定義多個靜態(tài)資源文件夾今妄,但是最終項(xiàng)目還是要部署的,因此最后靜態(tài)資源會統(tǒng)一進(jìn)行收集鸳碧,部署時盾鳞,一般只需要定義STATIC_ROOT這一個配置就好,并且如果同時用STATIC_ROOTSTATICFILES_DIRS的方式重復(fù)定義了同一個文件夾作為靜態(tài)資源存放路徑瞻离,反而會報(bào)錯腾仅,例如:
  #  這里進(jìn)行了重復(fù)定義,程序會報(bào)錯
  STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static'), 
      ]

 #會報(bào)以下錯誤:
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

System check identified 1 issue (0 silenced).
  1. MEDIA_URL:用法同STATIC_URL琐脏,方便我們在編寫代碼時書寫路徑攒砖。
    #vim setting.py    -> MEDIA_ROOT配置
    MEDIA_URL = '/media/'
  1. MEDIA_ROOT:作用同STATIC_ROOT缸兔,用于定義媒體資源存放路徑。
    #vim setting.py    -> MEDIA_ROOT配置
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

可能會有疑問吹艇,既然已經(jīng)有了static靜態(tài)文件配置惰蜜,為什么還要再配置media?
原因是分工不同受神,static存放的是靜態(tài)資源抛猖,而media雖然也存放相關(guān)資源,但存放的是用戶自己上傳的資源鼻听,例如頭像财著,文件等,這個時候放在static文件夾里面顯然不合適撑碴。
因此撑教,網(wǎng)站開發(fā)時所需的圖片等靜態(tài)資源是依然存放在static文件夾中,而不是media文件夾醉拓。

  1. {% load static %}:如果在HTML中使用了static方法引入的路徑伟姐,就需要在HTML中引入,否則亿卤,文件將依然無法找到愤兵,下面舉個例子,如何在HTML中正確引用靜態(tài)資源排吴。
<!DOCTYPE html>     
{% load static %}       #在此處引用static標(biāo)簽秆乳,
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
  #假設(shè)在static文件夾下存在picture,里面有一個名為1.png的文件钻哩,這兩種方法都能成功加載出來
  #css和js引用方法類似屹堰,不做演示
<img src="{% static 'picture/1.png' %}" /> 
<img src="/static/picture/1.png" />
 #第一種就是django提供的模板語法,因此使用前需要load static一下
 #第二種是通過配置的STATIC_URL找到的該文件憋槐。
 #這兩種寫法的好處就是當(dāng)靜態(tài)文件目錄發(fā)生變化時双藕,不需要再到HTML中手動修改,只需修改相應(yīng)的配置即可阳仔。當(dāng)然忧陪,你也可以通過寫相對路徑的方式成功加載。
</html>

8.templates:定義HTML模板文件存放目錄近范,如果你用的是pycharm的IDE的話嘶摊,在創(chuàng)建項(xiàng)目時,可以根據(jù)配置自動創(chuàng)建一個templates目錄评矩,pycham會自動幫我們配置叶堆,如果沒有配置,就需要手動創(chuàng)建斥杜,當(dāng)然虱颗,你也可以選擇自定義該目錄

    # vim ./setting.py  ->配置templates模板文件夾
  TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # 這里就是定義templates模板文件存放位置的配置沥匈,意思是當(dāng)前項(xiàng)目文件下的templates文件夾,前提是templates文件夾存在

        # 下面部分配置省略
    },
]

9.collectstatic:在項(xiàng)目部署時忘渔,我們還要進(jìn)行靜態(tài)文件的收集高帖,如果手動收集靜態(tài)文件的話,工程量無疑很大畦粮,而且部署后散址,debug肯定要改為debug=false,這時如果不進(jìn)行靜態(tài)文件的收集的話宣赔,django自帶的部分预麸,如admin后臺就會出現(xiàn)CSS無法加載的問題,因此儒将,項(xiàng)目部署前吏祸,這個操作是是必須的。
django的django.contrib.staticfiles提供了一個收集靜態(tài)文件的命令:python manage.py collectstatic椅棺,執(zhí)行該命令后犁罩,會將靜態(tài)文件收集到配置好的STATIC_ROOT

   C:\Users\Administrator\Desktop\myweb>python manage.py collectstatic


這些就是關(guān)于靜態(tài)資源配置的講解了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末齐蔽,一起剝皮案震驚了整個濱河市两疚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌含滴,老刑警劉巖诱渤,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谈况,居然都是意外死亡勺美,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門碑韵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赡茸,“玉大人,你說我怎么就攤上這事祝闻≌嘉裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵联喘,是天一觀的道長华蜒。 經(jīng)常有香客問我,道長豁遭,這世上最難降的妖魔是什么叭喜? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蓖谢,結(jié)果婚禮上捂蕴,老公的妹妹穿的比我還像新娘譬涡。我一直安慰自己,他們只是感情好啥辨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布昂儒。 她就那樣靜靜地躺著,像睡著了一般委可。 火紅的嫁衣襯著肌膚如雪渊跋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天着倾,我揣著相機(jī)與錄音拾酝,去河邊找鬼。 笑死卡者,一個胖子當(dāng)著我的面吹牛蒿囤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崇决,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼材诽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恒傻?” 一聲冷哼從身側(cè)響起脸侥,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盈厘,沒想到半個月后睁枕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沸手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年外遇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片契吉。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡跳仿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捐晶,到底是詐尸還是另有隱情菲语,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布租悄,位于F島的核電站谨究,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泣棋。R本人自食惡果不足惜胶哲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潭辈。 院中可真熱鬧鸯屿,春花似錦澈吨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至婶恼,卻和暖如春桑阶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勾邦。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工蚣录, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眷篇。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓萎河,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕉饼。 傳聞我的和親對象是個殘疾皇子虐杯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容