Django 靜態文件配置


靜態文件配置

概述:
    靜態文件交由Web服務器處理,Django本身不處理靜態文件。簡單的處理邏輯如下(以nginx為例):
        URI請求 --> 按照Web服務器里面的配置規則先處理,以nginx為例,主要求配置在nginx.conf里的location
                        --> 如果是靜態文件,則由nginx直接處理
                        --> 如果不是則交由Django處理,Django根據urls.py里面的規則進行匹配

以上是部署到Web服務器后的處理方式,為了便於開發,Django提供了在開發環境的對靜態文件的處理機制,方法如下:

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/"配置,即對外開放了這個接口的權限
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:

靜態文件的處理又包括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里面設置MEDIA_ROOT(必須是本地路徑的絕對路徑),一般是這樣寫:
        MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\','/')

    MEDIA_URL是指從瀏覽器訪問時的地址前綴,舉個例子:
        MEDIA_ROOT = c:\temp\media\photo
        MEDIA_URL = "/data/"

    在開發階段,media的處理由django處理:
       訪問http://localhost/data/abc/a.png就是訪問c:\temp\media\photo\abc\a.png

       在模板里面這樣寫<img src="/media/abc/a.png">

       在部署階段最大的不同在於你必須讓web服務器來處理media文件,因此你必須在web服務器中配置,
       以便能讓web服務器能訪問media文件。

       以nginx為例,可以在nginx.conf里面這樣:
             location ~/media/{
                   root/temp/
                   break;
                }
       具體可以參考如何在nginx部署django的資料。

 


免責聲明!

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



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