Django靜態檔案處理總結

2021-06-20 04:14:57 字數 1913 閱讀 8041

靜態檔案指像css,js,images之類的檔案,在django裡面靜態檔案的處理與一般的檢視是不一樣,新手往往容易犯迷糊,本文做一下總結:

一、概述:

靜態檔案交由web伺服器處理,django本身不處理靜態檔案。簡單的處理邏輯如下(以nginx為例):

uri請求-----> 按照web伺服器裡面的配置規則先處理,以nginx為例,主要求配置在nginx.conf裡的location

|---------->如果是靜態檔案,則由nginx直接處理

|---------->如果不是則交由django處理,django根據urls.py裡面的規則進行匹配

以上是部署到web伺服器後的處理方式,為了便於開發,django提供了在開發環境的對靜態檔案的處理機制,方法是這樣:

2、在urls.py裡面加入

[python]view plain

copy

ifsettings.debug:  

urlpatterns += patterns(''

, url(r

'^media/(?p.*)$'

, 'django.views.static.serve'

, ),   

url(r'^static/(?p.*)$'

,'django.views.static.serve'

,), )  

3、這樣就可以在開發階段直接使用靜態檔案了。

二、media_root和media_url

而靜態檔案的處理又包括static和media兩類,這往往容易混淆,在django裡面是這樣定義的:

media:指使用者上傳的檔案,比如在model裡面的filefield,imagefield上傳的檔案。如果你定義

media_root=c:\temp\media,那麼file=models.filefield(upload_to="abc/"),上傳的檔案就會被儲存到c:\temp\media\abc

舉個例子:

[python]view plain

copy

[plain]view plain

copy

class blog(models.model):  

title=models.charfield(max_length=64)  

photo=models.imagefield(upload_to="photo")  

上傳的就上傳到c:\temp\media\photo,而在模板中要顯示該檔案,則在這樣寫}blog.photo

在settings裡面設定的media_root必須是本地路徑的絕對路徑,一般是這樣寫

[python]view plain

copy

project_path = os.path.abspath(os.path.dirname(__file__))  

media_root=os.path.join(project_path,'media/'

).replace(

'\\','

/')  

media_url是指從瀏覽器訪問時的位址字首,舉個例子:

[python]view plain

copy

media_root=c:\temp\media\photo  

media_url="/data/"

#可以隨便設定

在開發階段,media的處理由django處理:

訪問http://localhost/data/abc/a.png就是訪問c:\temp\media\photo\abc\a.png

在模板裡面這樣寫

django中靜態檔案的處理

要在django的tempalte file中引用css js gif等靜態檔案,首先一條setting.py中debug開關開啟。1 在project目錄下建立乙個存放靜態檔案的目錄,如 medias 2 在url.py patterns中增加一行 r site media p.django.vi...

Django靜態檔案

專案中的css js都是靜態檔案。一般會將靜態檔案放到乙個單獨的目錄中,以方便管理。在html頁面中呼叫時,也需要指定靜態檔案的路徑,django中提供了一種解析的方式配置靜態檔案路徑。靜態檔案可以放在專案根目錄下,也可以放在應用的目錄下,由於有些靜態檔案在專案中是通用的,所以推薦放在專案的根目錄下...

Django 靜態檔案

靜態檔案是 頁面所使用到的提前已經寫好的檔案,如css,js,第三方元件 bootstrap,sweetalert,fontawesome等 所使用到的html檔案統一放到templates資料夾中 那針對 所使用到的靜態檔案也應該單獨放到乙個資料夾中儲存,這個資料夾預設情況下都叫static,該資...