Django static靜態配置文件


對於Django來說靜態文件一般交由Web服務器處理,Django本身不處理靜態文件。為了使Django開發環境能夠處理靜態文件,Django有和生產環境不同的靜態文件配置方式。

Django 版本:1.10

 

開發(Dev)環境配置

 

一、STATIC_URL, STATICFILES_DIRS, STATIC_ROOT
1. 在app目錄下創建static目錄,將靜態文件和相關文件夾放到此目錄下,如your_app/static/img等
2. 確保settings.py中的INSTALLED_APPS中包含django.contrib.staticfiles,以及Debug為True
3. 設置settings.py中的STATIC_URL的值為“/static/”,作用參考5
4. 在模版開頭{% load static %}之后,在模版中使用{{ STATIC_URL }}作為靜態文件路徑前綴。比如css文件your_app/static/css/bootstrap.min.css,那么應用代碼為<link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet">
5. 可以測試單獨通過url訪問靜態文件(http://127.0.0.1:8000/static/css/bootstrap.min.css)

6. STATICFILES_DIRS用來配置一些額外的靜態文件的地址,如下配置。模版中訪問的時候,參考4即可。

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

7. STATIC_ROOT, 設置絕對路徑, 在collectstatic運行的時候會把靜態文件拷貝到這個目錄中,其更多的作用是在從開發環境到生產環節過程中移植靜態文件。

 

二、MEDIA_ROOT和MEDIA_URL
MEDIA_ROOT:指用戶上傳的文件,比如在Model里面的FileFIeld,ImageField上傳的文件。如果你定義MEDIA_ROOT='/Users/xxx/media/',那么File=models.FileField(upload_to="app01/pic"),上傳的文件就會被保存到'/Users/xxx/media/app01/pic'
MEDIA_URL:URL的映射,前后要加上‘/’ 表示從根目錄開始,比如“/site_media/”,加上這個屬性之后,靜態文件的鏈接前面會加上這個值。

1. 在settings文件中設置MEDIA_URL,比如MEDIA_URL='/media/'

2. 在settings文件中設置MEDIA_ROOT,可以是任意位置(不與STATIC_ROOT相同),用於保存上傳的文件

3. urls文件中配置如下,

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 在settings文件中,TEMPLATES中'context_processors'下面新增'django.template.context_processors.media'

配置好后可以使用瀏覽器訪問上傳的文件, http://ip:port/MEDIA_URL/upload_path/file. 比如MEDIA_URL設置的是'/media/',MEDIA_ROOT設置的是'/User/xxx/',在models中設置的文件上傳到(upload_to=)'app01/pic',那么文件上傳后實際存儲地址為/User/xxx/app01/pic. 通過URL訪問的話:http://ip:port/media/app01/pic/test.jpg. 在前端模版中訪問這個上傳的圖片: <img src="{{ MEDIA_URL }}app01/pic/test.jpg"">

 

更多參考官方文檔

 

生產環節部署

在部署階段最大的不同在於你必須讓web服務器來處理靜態文件,因此你必須在web服務器中配置,以便能讓web服務器能訪問靜態文件。官方文檔參考這里。后面會在自己試驗過后補充自己的備注。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM