Django 靜態(tài)文件配置過(guò)程詳解
靜態(tài)文件配置
概述:
靜態(tài)文件交由Web服務(wù)器處理,Django本身不處理靜態(tài)文件。簡(jiǎn)單的處理邏輯如下(以nginx為例):
URI請(qǐng)求 --> 按照Web服務(wù)器里面的配置規(guī)則先處理,以nginx為例,主要求配置在nginx.conf里的location
--> 如果是靜態(tài)文件,則由nginx直接處理
--> 如果不是則交由Django處理,Django根據(jù)urls.py里面的規(guī)則進(jìn)行匹配
以上是部署到Web服務(wù)器后的處理方式,為了便于開(kāi)發(fā),Django提供了在開(kāi)發(fā)環(huán)境的對(duì)靜態(tài)文件的處理機(jī)制,方法如下:
static配置:
STATIC主要指的是如css、js、images這樣文件:
STATIC_URL = '/static/' # 別名 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), # 實(shí)際名,即實(shí)際文件夾的名字 ] # 注意:django對(duì)引用名和實(shí)際名進(jìn)行映射,引用時(shí),只能按照引用名來(lái),不能按實(shí)際名去找
media配置:
MEDIA_URL = "/media/" # 用戶上傳的文件(針對(duì)models.py中的FileField、ImageField字段)保存到哪 MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")
# 配合settings.py里的MEDIA_URL = "/media/"配置,即對(duì)外開(kāi)放了這個(gè)接口的權(quán)限 from django.conf.urls import url from django.views.static import serve from . import settings urlpatterns = [ url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}), ]
ps:
靜態(tài)文件的處理又包括STATIC和MEDIA兩類,這往往容易混淆,在Django里面是這樣定義的:
MEDIA:指用戶上傳的文件,比如在Model里面的FileFIeld,ImageField上傳的文件。如果你定義
MEDIA_ROOT = c:\temp\media,那么File=models.FileField(upload_to="abc/")#,上傳的文件就會(huì)被保存到
c:\temp\media\abc eg: class blog(models.Model): Photo = models.ImageField(upload_to="photo")
上傳的圖片就上傳到c:\temp\media\photo,而在模板中要顯示該文件,則在settings里面設(shè)置MEDIA_ROOT(必須是本地路徑的絕對(duì)路徑),一般是這樣寫:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\','/')
MEDIA_URL是指從瀏覽器訪問(wèn)時(shí)的地址前綴,舉個(gè)例子:
MEDIA_ROOT = c:\temp\media\photo MEDIA_URL = "/data/"
在開(kāi)發(fā)階段,media的處理由django處理:
訪問(wèn)http://localhost/data/abc/a.png就是訪問(wèn)c:\temp\media\photo\abc\a.png
在模板里面這樣寫<img src="/media/abc/a.png">
在部署階段最大的不同在于你必須讓web服務(wù)器來(lái)處理media文件,因此你必須在web服務(wù)器中配置,
以便能讓web服務(wù)器能訪問(wèn)media文件。
以nginx為例,可以在nginx.conf里面這樣:
location ~/media/{ root/temp/ break; }
具體可以參考如何在nginx部署django的資料。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PyQT5之使用QT?Designer創(chuàng)建基本窗口方式
這篇文章主要介紹了PyQT5之使用QT?Designer創(chuàng)建基本窗口方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02詳解Python中的array數(shù)組模塊相關(guān)使用
數(shù)組并不是Python中內(nèi)置的標(biāo)配數(shù)據(jù)結(jié)構(gòu),不過(guò)擁有array模塊我們也可以在Python中使用數(shù)組結(jié)構(gòu),下面我們就來(lái)詳解詳解Python中的array數(shù)組模塊相關(guān)使用2016-07-07PyCharm 2020.2.2 x64 下載并安裝的詳細(xì)教程
這篇文章主要介紹了PyCharm 2020.2.2 x64 下載并安裝的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10python基于socket進(jìn)行端口轉(zhuǎn)發(fā)實(shí)現(xiàn)后門隱藏的示例
今天小編就為大家分享一篇python基于socket進(jìn)行端口轉(zhuǎn)發(fā)實(shí)現(xiàn)后門隱藏的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07python實(shí)現(xiàn)決策樹(shù)、隨機(jī)森林的簡(jiǎn)單原理
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)決策樹(shù)、隨機(jī)森林的簡(jiǎn)單原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Python 實(shí)現(xiàn)使用空值進(jìn)行賦值 None
這篇文章主要介紹了Python 實(shí)現(xiàn)使用空值進(jìn)行賦值 None,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03python統(tǒng)計(jì)函數(shù)庫(kù)scipy.stats的用法解析
今天小編就為大家分享一篇python統(tǒng)計(jì)函數(shù)庫(kù)scipy.stats的用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02使用Keras構(gòu)造簡(jiǎn)單的CNN網(wǎng)絡(luò)實(shí)例
這篇文章主要介紹了使用Keras構(gòu)造簡(jiǎn)單的CNN網(wǎng)絡(luò)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python 獲取sqlite3數(shù)據(jù)庫(kù)的表名和表字段名的實(shí)例
今天小編就為大家分享一篇python 獲取sqlite3數(shù)據(jù)庫(kù)的表名和表字段名的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07