django中靜態(tài)文件配置static的方法
環(huán)境
- centos7
- django 1.11
- nginx
白話
我們可以使用Template 設(shè)置我們的網(wǎng)頁(yè),同時(shí),一個(gè)完美的網(wǎng)頁(yè)需要css,js,image 等靜態(tài)文件的支持。
django中配置方式貌似有不少總,因?yàn)楹芏嘞嚓P(guān)的博客寫的方式并不一致,當(dāng)然這可能是django 的版本不同導(dǎo)致的。
當(dāng)我們?cè)谝粋€(gè)項(xiàng)目下創(chuàng)建一個(gè)app后,我們就需要為該app下創(chuàng)建一個(gè)static 文件夾來(lái)存放相關(guān)靜態(tài)資源。
但創(chuàng)建了多個(gè)app后,就需要在多個(gè)app下創(chuàng)建static。
這樣引入了一個(gè)問題,因?yàn)?,我們的可能用了同一個(gè)js文件。分別存放顯然是浪費(fèi)加載時(shí)間。
于是在實(shí)際部署的時(shí)候,我們會(huì)將不同app下的static 文件放到一個(gè)“合適”的地方。提高資源加載速度,同時(shí)也方便管理。
好了,大概就是這個(gè)思路,我們下面介紹如何配置
配置
step one
--app --migrations --static --css --js --image --templates --__init__.py ...
文件結(jié)構(gòu)如上所示,注意,我這里只展示了某app下的結(jié)構(gòu),而不是整個(gè)項(xiàng)目結(jié)構(gòu),可能你的沒有templates這個(gè)文件夾,這不要緊,這個(gè)是我創(chuàng)建的。
我們最好在static下分類好不同文件夾 css , js,image.(這是推薦的做法)
多個(gè)app時(shí),我們就在不同的app 下創(chuàng)建static。(后面我們?cè)谥v更合理的方法,這里需要這樣做為了你理清步驟)
step two
在settings.py中的STATIC_URL = '/static/'后面添加
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
這個(gè)STATIC_ROOT 就是我們最終部署時(shí)候需要使用的,解決資源分散的問題。
BASE_DIR 這個(gè)變量在settings.py的開始部分被定義,就是項(xiàng)目根目錄的目錄名。
os.path.join 方法,在項(xiàng)目根目錄下新建一個(gè)static文件夾。
我看到很多博客這里配置的很多,很亂,讓人摸不著頭腦。
這個(gè)地方完全可以這樣配置,加載我們的靜態(tài)資源。(信我,我可是被很多不負(fù)責(zé)任的博客坑慘了)
step three
創(chuàng)建文件夾完,配置文件這兩步都完成后,我們需要的就是把他放到網(wǎng)頁(yè)中顯示。
在app下新建一個(gè)templates,如果有就不用創(chuàng)建
--app --migrations --static --templates --appname --index.html --__init__.py ...
大家注意,我并沒有直接在templates下直接創(chuàng)建index.html ,而是創(chuàng)建了一個(gè)”appname”(就根據(jù)你的app來(lái)命名這樣不會(huì)沖突)。并在appname 下創(chuàng)建的index.html。
因?yàn)閐jango去找template的時(shí)候是吧app下的templates ,存為一個(gè)list。如果我們多個(gè)app,就可能導(dǎo)致,想訪問app2的index,結(jié)果卻返回了app1的index.html。
index.html 內(nèi)容
{% load static %} #這個(gè)地方引入static這個(gè)文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <img src="{% static "image/logo.png" %}" alt="My image"/> #{% static "image/logo.png" %}表示路徑 </body> </html>
這里的#號(hào)注釋是方便大家理解,并不是html支持的格式,粘貼的時(shí)候需要去掉
并在image文件夾下加入一張名為logo.png的圖片,因?yàn)閳D片可以直觀的判讀我們的設(shè)置是否生效。
python manage.py runserver 0.0.0.0:9000
訪問你的9000端口,查看時(shí)候生效。注意我們到這里還未配置nginx.
如果正確,說明路徑?jīng)]問題。
step four
python manage.py collectstatic
該命令收集項(xiàng)目下的靜態(tài)文件,統(tǒng)一保存到 STATIC_ROOT 就是我們第二步,剛剛配置的。
--project --project --static --app1 --app2 --manage.py ...
step five
nginx 中配置
location ^~ /static/ { root /home/project/; }
這個(gè)地方 注意配置到static的上級(jí)就可以了。
我之前配置成了root /home/project/static 就會(huì)一直提示404
在部署的時(shí)候,django也建議將settings.py中的debug=True 改為debug=False。以保證安全性。
重新啟動(dòng)nginx ,看看是否成功了呢?
如果成功了,可以將app下的static刪掉再試試,理論上也是可以成功的,因?yàn)榇藭r(shí)我們已經(jīng)將項(xiàng)目所有的靜態(tài)文件全都集中到了根目錄下的static中。
總結(jié)
配置靜態(tài)文件還是要先了解他是如何生效的,one by one,搞清邏輯。
那樣在配置才不會(huì)混亂,否則不同的教程只會(huì)讓人抓狂。
如果找不到相關(guān)博客的話,靜下心來(lái)閱讀官方文檔。你可以做到的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何配置vue.config.js 處理static文件夾下的靜態(tài)文件
- PHP中abstract(抽象)、final(最終)和static(靜態(tài))原理與用法詳解
- 快速解決Django關(guān)閉Debug模式無(wú)法加載media圖片與static靜態(tài)文件
- Python 類方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- 對(duì)Django中static(靜態(tài))文件詳解以及{% static %}標(biāo)簽的使用方法
- .Net Core中間件之靜態(tài)文件(StaticFiles)示例詳解
- 詳解Vue-cli中的靜態(tài)資源管理(src/assets和static/的區(qū)別)
- 通過案例了解靜態(tài)修飾符static使用場(chǎng)景
相關(guān)文章
pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征
今天小編就為大家分享一篇pandas factorize實(shí)現(xiàn)將字符串特征轉(zhuǎn)化為數(shù)字特征,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-12-12通過python爬蟲mechanize庫(kù)爬取本機(jī)ip地址的方法
python中的mechanize算是一個(gè)比較古老的庫(kù)了,在python2的時(shí)代中,使用的多一些,在python3以后就很少使用了,現(xiàn)在已經(jīng)是2202年了,可能很多人都沒聽說過mechanize,這不要緊,我們先來(lái)簡(jiǎn)單的講解一下,如何使用mechanize,感興趣的朋友一起看看吧2022-08-08python實(shí)現(xiàn)兩個(gè)dict合并與計(jì)算操作示例
這篇文章主要介紹了python實(shí)現(xiàn)兩個(gè)dict合并與計(jì)算操作,結(jié)合具體實(shí)例形式分析了Python使用collections.Counter進(jìn)行字典dict合并與遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下2019-07-07pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例
在使用Pandas進(jìn)行數(shù)據(jù)處理時(shí),有時(shí)候我們可能會(huì)需要對(duì)數(shù)據(jù)進(jìn)行重置索引的操作,本文主要介紹了pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Python學(xué)習(xí)筆記之自定義函數(shù)用法詳解
這篇文章主要介紹了Python學(xué)習(xí)筆記之自定義函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了自定義函數(shù)的功能、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-06-06Python實(shí)現(xiàn)給PDF添加水印的方法
這篇文章主要介紹了Python實(shí)現(xiàn)給PDF添加水印的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01