django中影象上傳(檔案上傳)的配置
阿新 • • 發佈:2021-11-29
一、settings配置
- MEDIA_URL= "/media/" # 可以換成你自己的
這個是生成URL用的。如果你的資料庫中存的影象假設是:img/test.png,那麼生成的URL: /media/img/test.png。 - MEDIA_ROOT = BASE_DIR / 'media' #
這個是圖片上傳的根目錄。如果你在ImageField或者FileField中設定了upload_to屬性(假設你設定為img),那麼django將會把檔案上傳到: BASE_DIR /media/img下。 - 'django.template.context_processors.media'
配置了這兩個選項之外,你還得在TEMPLATES的'OPTIONS'中新增上面這個'context_processors',加上之後大約是這個樣子的:
TEMPLATES = [
{
# 跟本問題無關的我刪去了
'OPTIONS': {
'context_processors': [
# 跟本問題無關的我刪去了
'django.template.context_processors.media',
],
},
},
]
只有添加了這個,你才可以在模板檔案中使用{{ MEDIA_URL }}
二、路由問題
完成了上面的配置,還是不能訪問圖片檔案。因為還沒有路由。網路上很多人是用url新增路由,大約是這個樣子,
高版本的可以用 re_path。
url(r'^media/(?P<path>.*)$, serve, {
'document_root': settings.MEDIA_ROOT,
})
還有人在patterns後加上下面的程式碼,大概都可以工作。:
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
可是不知道是什麼原理。
三、研究後終於想通了
通過將加上+static後的patterns打印出來:
[<URLPattern 'upload/'>, <URLPattern 'show/'>, <URLPattern '^crm/media/(?P<path>.*)$'>]
突然明白:static也不過是生成了個URL,+也就是兩個陣列的加操作。
生成的URL是以settings.MEDIA_ROOT為參照的。實際上主是:MEDIA_URL和MEDIA_ROOT建立了一種對應關係。
和MEDIA_URL相關的URL都去MEDIA_ROOT下去找檔案。