1. settings 設(shè)置
Django 通過后臺(admin或xadmin)上傳圖片之前,需要設(shè)置 media 路徑與文件夾。
主要處理 ImageField字段,這里 upload_to 中,%Y 表示年,%m 表示月。
class CourseOrg(models.Model):
image = models.ImageField(default='', upload_to='org/%Y/%m', verbose_name='logo', max_length=100)
在項目目錄下新建文件夾,名叫 media,并在 settings 中設(shè)置 media 路徑與目錄。
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
2. 模板中圖片地址
如何把 ImageField 轉(zhuǎn)化成圖片地址?
首先,ImageField 存儲方式就是字符串,是圖片的相對路徑地址。{{ course_org.image }} 是相對路徑,還需要在前面加上 settings 中配置的 MEDIA_URL,可以寫成

3. settings 中配置模板的處理器
在 TEMPLATES 中 OPTIONS 中的 context_processors 中需要加上'django.template.context_processors.media'。
這個從 Django 1.8 之前是 'django.core.context_processors.media',現(xiàn)在 Django 1.11
開始,context_processors.media 從 core 更換為指導(dǎo) template。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
#...
'django.template.context_processors.media',
],
},
},
]
到這一步,仍然不能顯示圖片,在網(wǎng)頁源代碼中可以看到有圖片的地址。但是仍然需要在 urls 中配置圖片地址的路由,讓 Django 知道到那個地方去取回圖片。
4. urls 配置
需要引入一個方法處理靜態(tài)文件
from django.views.static import serve
另外需要從 settings 中引入設(shè)置好的 media 目錄地址 MEDIA_ROOT
from MxOnline.settings import MEDIA_ROOT
最后在 url 中配置完整如下
# -*- coding:utf-8 -*-
from django.views.static import serve
from MxOnline.settings import MEDIA_ROOT
urlpatterns = [
# 處理 media 信息,用于圖片獲取
url(r'^media/(?P<path>.*)', serve, {"document_root":MEDIA_ROOT}),
]
至此就可以顯示出來圖片。