django中靜態(tài)文件配置static的方法
環(huán)境
- centos7
- django 1.11
- nginx
白話
我們可以使用Template 設(shè)置我們的網(wǎng)頁,同時(shí),一個(gè)完美的網(wǎng)頁需要css,js,image 等靜態(tài)文件的支持。
django中配置方式貌似有不少總,因?yàn)楹芏嘞嚓P(guān)的博客寫的方式并不一致,當(dāng)然這可能是django 的版本不同導(dǎo)致的。
當(dāng)我們在一個(gè)項(xiàng)目下創(chuàng)建一個(gè)app后,我們就需要為該app下創(chuàng)建一個(gè)static 文件夾來存放相關(guān)靜態(tài)資源。
但創(chuàng)建了多個(gè)app后,就需要在多個(gè)app下創(chuàng)建static。
這樣引入了一個(gè)問題,因?yàn)椋覀兊目赡苡昧送粋€(gè)js文件。分別存放顯然是浪費(fèi)加載時(shí)間。
于是在實(shí)際部署的時(shí)候,我們會將不同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。(后面我們在講更合理的方法,這里需要這樣做為了你理清步驟)
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)頁中顯示。
在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來命名這樣不會沖突)。并在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>
這里的#號注釋是方便大家理解,并不是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的上級就可以了。
我之前配置成了root /home/project/static 就會一直提示404
在部署的時(shí)候,django也建議將settings.py中的debug=True 改為debug=False。以保證安全性。
重新啟動nginx ,看看是否成功了呢?
如果成功了,可以將app下的static刪掉再試試,理論上也是可以成功的,因?yàn)榇藭r(shí)我們已經(jīng)將項(xiàng)目所有的靜態(tài)文件全都集中到了根目錄下的static中。
總結(jié)
配置靜態(tài)文件還是要先了解他是如何生效的,one by one,搞清邏輯。
那樣在配置才不會混亂,否則不同的教程只會讓人抓狂。
如果找不到相關(guān)博客的話,靜下心來閱讀官方文檔。你可以做到的。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何配置vue.config.js 處理static文件夾下的靜態(tài)文件
- PHP中abstract(抽象)、final(最終)和static(靜態(tài))原理與用法詳解
- 快速解決Django關(guān)閉Debug模式無法加載media圖片與static靜態(tài)文件
- Python 類方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- 對Django中static(靜態(tài))文件詳解以及{% static %}標(biāo)簽的使用方法
- .Net Core中間件之靜態(tài)文件(StaticFiles)示例詳解
- 詳解Vue-cli中的靜態(tài)資源管理(src/assets和static/的區(qū)別)
- 通過案例了解靜態(tài)修飾符static使用場景
相關(guān)文章
Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的分類
今天給大家整理了Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的分類的文章,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
完美處理python與anaconda環(huán)境變量的沖突問題
這篇文章主要介紹了完美處理Python與anaconda環(huán)境變量的沖突問題,對anaconda感興趣的同學(xué),可以參考下2021-04-04
Pycharm使用爬蟲時(shí)遇到etree紅線問題及解決
這篇文章主要介紹了Pycharm使用爬蟲時(shí)遇到etree紅線問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Python實(shí)現(xiàn)注冊登錄系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了適合初學(xué)者學(xué)習(xí)的Python3銀行賬戶登錄系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
python基于watchdog庫全自動化監(jiān)控目錄文件
這篇文章主要介紹了python基于watchdog庫全自動化監(jiān)控目錄文件,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
python常用運(yùn)維腳本實(shí)例小結(jié)
這篇文章主要介紹了python常用運(yùn)維腳本實(shí)例小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

