靜態檔案指像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,該資...