- MEDIA_ROOT:主要是為了存放上傳的文件,比如在ImageField中,這個值加上upload_to的值就是真實存放上傳圖片的文件位置;Django里邊文件內容實際上是不會存放到數據庫里邊的,大多數數據庫存放數據效率低,需要保存在文件系統里。PS:FileUploads(用來存儲文件)
- MEDIA_URL:URL的映射,前后要加上‘/’ 表示從根目錄開始,比如“/site_media/”,加上這個屬性之后,靜態文件的鏈接前面會加上這個值。
- STATIC_ROOT:在這個文件里邊的目錄會當成靜態文件處理。但是不能把自己辛苦寫的Javascript或者圖片等靜態文件放進去。
- STATIC_URL:URL映射,指定靜態目錄的URL,默認的是"/static/"。
- STATICFILES_DIRS:指定一個工程里邊哪個目錄存放了與這個工程相關的靜態文件,是一個列表。如果列表中有一個是 “/home/shishang/test/static”,其中有一個文件內容是productlist.html, 我們只要訪問http://localhost:8000/static/productlist.html就可以直接訪問界面了。
- 轉:Django提供了一個方法自動地將所有的靜態文件放在一起。只要在寫App的時候創建一個static子目錄專門保存靜態文件就行了。在開發階段,不必費心去做映射,不需要配置
urls.py
。在布署到生產環境的時候,只需要配置Apache把/static/
映射到STATIC_ROOT
。然后運行manage.py collectstatic
,自動地STATICFILES_DIRS
列出的目錄以及各個App下的static子目錄的所有文件復制到STATIC_ROOT。因為復制過程可能會覆蓋掉原來的文件,所以,一定不能把我們辛苦做出來靜態文件放這邊!在開發階段,Django把/static
映射到django.contrib.staticfiles
這個App。staticfiles
自動地從STATICFILES_DIRS
、STATIC_ROOT
以及各個App的static
子目錄里面搜索靜態文件。一旦布署到開發環境上,settings.py不需要重新編寫,只要在Apache的配置文件里面寫好映射,/static
將會被Apache處理。django.contrib.staticfiles
雖然仍然存在,但因為不會接收到以/static/
開始的路徑,所以將不會產生作用。不必擔心Django會使用處理速度變慢。另外,當settings.DEBUG is False
的時候,staticfiles
將自動關閉。 - 具體代碼示例:
#setting.py 中加入: import os HERE = os.path.dirname(os.path.dirname(__file__)) MEDIA_ROOT = os.path.join( HERE, "../media").replace('\\', '/') MEDIA_URL = "/site_media/" STATIC_ROOT = os.path.join(HERE, "../static").replace('\\', '/') STATIC_URL = "/static/" STATICFILES_DIRS = ( os.path.join(HERE, "../app名字/static/").replace('\\', '/'), ) #和STATIC_ROOT最好路徑不要重疊 #建議將靜態文件保存在app的static目錄中 #urls.py中加入: from django.conf.urls.static import static from django.conf import settings urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) #這樣使用 <link type="text/css" rel="stylesheet" href="/static/css/bootstrap.min.css"/> <link type="text/css" rel="stylesheet" href="/static/css/bootstrap-responsive.css"/>