参考文章
环境:Django2.0 Python3.5.4
使用ImageField首先需要装Pillow。
pip install Pillow
配置
要在admin中上传图片,必须要在setting.py中经行路径配置,否则无法让django知道我们的路径在哪。为什么不在models中设置字段时直接设置绝对路径?在models中,只能设置相对路径,即upload_to所指的路径一定要是相对的。
配置MEDIA_URL,MEDIA_ROOT这2个关键字,我们可以把这个文件夹放在static中,但是MEDIA_URL后面不能写'/static/',MEDIA_URL相当于取别名
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static','image')(自己要upload_to的路径的文件夹)
models中创建字段
class Test(models.Model):
name = models.CharField(max_length=50)
image = models.ImageField(upload_to='image')(这里的image是相对路径,绝对路径为:/static/image)
def __str__(self):
return self.name
建立好模型,需要进行迁移操作,
python manage.py makemigrations
python manage.py migrate
PS.如果是创建好表之后再想起来用保存图片的字段,需要在后面添加默认值defalt,否则django不知道为之前的表添加什么值,即使你还没有使用之前的数据库
绑定admin
admin.site.register(Test)
如何直接在admin中直接查看上传的图片
我们要看上传的图片还需要进一步配置,如果不配置,我们点开上传图片的url就会直接报错404,告诉我们在url配置中并没有你这个图片的url,无法跳转。
如何配置呢?
a.首先在setting中将我们的MEDIA_URL别名加在TEMPLATES中:
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.template.context_processors.media',#在这加,前面都是一样的,只有最后的media是取你自己起的名字
],
},
},
]
b.找到urls.py,在里面引入setting
from django.conf import settings
from django.conf.urls.static import static
接着配置我们的urlpatterns
urlpatterns = [
path('admin/', admin.site.urls),
……
] + static(settings.MEDIA_URL , document_root = settings.MEDIA_ROOT)#在列表后面加上这句
这样的话,我们点开admin中的图片路径就可以直接看到图片了