Django:設(shè)置media以顯示圖片

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,可以寫成

![]({{ MEDIA_URL }}{{ org.image }})

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}),
]

至此就可以顯示出來圖片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容