Django 靜態(tài)文件配置過程詳解
靜態(tài)文件配置
概述:
靜態(tài)文件交由Web服務(wù)器處理,Django本身不處理靜態(tài)文件。簡單的處理邏輯如下(以nginx為例):
URI請求 --> 按照Web服務(wù)器里面的配置規(guī)則先處理,以nginx為例,主要求配置在nginx.conf里的location
--> 如果是靜態(tài)文件,則由nginx直接處理
--> 如果不是則交由Django處理,Django根據(jù)urls.py里面的規(guī)則進行匹配
以上是部署到Web服務(wù)器后的處理方式,為了便于開發(fā),Django提供了在開發(fā)環(huán)境的對靜態(tài)文件的處理機制,方法如下:
static配置:
STATIC主要指的是如css、js、images這樣文件:
STATIC_URL = '/static/' # 別名 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), # 實際名,即實際文件夾的名字 ] # 注意:django對引用名和實際名進行映射,引用時,只能按照引用名來,不能按實際名去找
media配置:
MEDIA_URL = "/media/" # 用戶上傳的文件(針對models.py中的FileField、ImageField字段)保存到哪 MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")
# 配合settings.py里的MEDIA_URL = "/media/"配置,即對外開放了這個接口的權(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/")#,上傳的文件就會被保存到
c:\temp\media\abc eg: class blog(models.Model): Photo = models.ImageField(upload_to="photo")
上傳的圖片就上傳到c:\temp\media\photo,而在模板中要顯示該文件,則在settings里面設(shè)置MEDIA_ROOT(必須是本地路徑的絕對路徑),一般是這樣寫:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\','/')
MEDIA_URL是指從瀏覽器訪問時的地址前綴,舉個例子:
MEDIA_ROOT = c:\temp\media\photo
MEDIA_URL = "/data/"
在開發(fā)階段,media的處理由django處理:
訪問http://localhost/data/abc/a.png就是訪問c:\temp\media\photo\abc\a.png
在模板里面這樣寫<img src="/media/abc/a.png">
在部署階段最大的不同在于你必須讓web服務(wù)器來處理media文件,因此你必須在web服務(wù)器中配置,
以便能讓web服務(wù)器能訪問media文件。
以nginx為例,可以在nginx.conf里面這樣:
location ~/media/{
root/temp/
break;
}
具體可以參考如何在nginx部署django的資料。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python機器學(xué)習(xí)NLP自然語言處理基本操作之命名實例提取
自然語言處理(?Natural?Language?Processing,?NLP)是計算機科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法2021-11-11
Keras實現(xiàn)DenseNet結(jié)構(gòu)操作
這篇文章主要介紹了Keras實現(xiàn)DenseNet結(jié)構(gòu)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
在ubuntu16.04中將python3設(shè)置為默認的命令寫法
這篇文章主要介紹了在ubuntu16.04中將python3設(shè)置為默認python的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-10-10
Python實現(xiàn)PDF提取文字并統(tǒng)計詞頻
這篇文章主要為大家介紹了Python土豪通過統(tǒng)計詞頻來實現(xiàn)快速預(yù)覽PDF報告效果,文中提供了文字PDF和圖片PDF提取文字的兩類方式,希望對大家有所幫助2025-04-04
Protocol Buffers(Protobuf)功能及使用方法
本文介紹了ProtocolBuffers(Protobuf)及其編譯器protoc,包括其數(shù)據(jù)描述語言的特性、編譯器的功能、.proto文件的定義、使用方法、支持的編程語言、安裝步驟、常用命令選項以及高級功能,感興趣的朋友跟隨小編一起看看吧2025-01-01
Pandas數(shù)據(jù)結(jié)構(gòu)詳細說明及如何創(chuàng)建Series,DataFrame對象方法
本篇文章中,我們主要側(cè)重于介紹Pandas數(shù)據(jù)結(jié)構(gòu)本身的特性,以及如何創(chuàng)建一個Series或者DataFrame數(shù)據(jù)對象,并填入一些數(shù)據(jù)2021-10-10
Python給Excel寫入數(shù)據(jù)的四種方法小結(jié)
本文主要介紹了Python給Excel寫入數(shù)據(jù)的四種方法小結(jié),包含openpyxl庫、xlsxwriter庫、pandas庫和win32com庫,具有一定的參考價值,感興趣的可以了解一下2025-02-02

