1、在model中定了ImageField的數據類型:
image = models.ImageField(upload_to='teacher/%Y/%m', verbose_name=u'頭像',default='')
其中upload_to='teacher/%Y/%m'定義的是相對路徑,但是后台程序怎么知道這個是相對路徑呢?
這就需要在setting.py文件中定義存放上傳資源的根目錄,假設media是存放資源的文件夾,那么就需要定義MEDIA_ROOT和項目根目錄做映射關系
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
2、html讀取image地址:
在django中定義的image的類型是ImageField類型,通過進入數據庫查看發現其實這個地址是一個相對路徑的字符串值,在html直接取這個image的值,其實是會做轉換成相對路徑的地址,
那么這個取出來的其實是相對路徑的地址,但是不能鞥我們的圖片存取,所以我們需要在這個地址的前面加上setting.py文件中設置的存儲上傳數據的MEDIA_URL:
{{ MEDIA_URL }}{{ org.image }}
在使用MEDIA_URL的時候,需要在setting.py的TEMPLATES中加上'django.core.context_processors.media'(上下文處理器),
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.media',
],
},
},
]
加上這個之后,django就會自動給MEDIA_URL 注冊到thml當中去,如果不這么配置,實際上是取不到MEDIA_URL 這個值的
完成上面的配置之后,發現還是沒顯示出我們的圖片,是因為我們沒有指定訪問這個URL {{ MEDIA_URL }}{{ org.image }}時應該去哪去這個文件,在urls.py文件中進行以下設置:
from django.views.static import serve
#配置上傳按訪問處理函數
url(r'^media/(?P<path>.*)$', serve, {'document_root':MEDIA_ROOT}),
