如何在 Django admin 后台上传图片文件?
2018-11-21 by dongnan
目标
实现 django admin
后台上传图片文件功能。
环境
软件 | 版本 |
---|---|
Django |
1.11 |
Python |
3.4 |
Ubuntu Desktop |
14.04 |
步骤
配置文件
在 setting.py
文件中设置上传目录。
# 上传目录自动创建
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'
修改 Model类
在 models
中添加 ImageField
类型字段
# models.py 文件,以 article 类为例:
class Article(models.Model):
# 省略...
photo = models.ImageField(upload_to='img/%Y/%m/%d/')
迁移数据库
python manage.py makemigrations
Migrations for 'blog':
blog/migrations/0003_article_photo.py
- Add field photo to article
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, comment, contenttypes, sessions, user
Running migrations:
Applying blog.0003_article_photo... OK
在后台上传图片
在设置的类中上传图片,例如实例中的 Article
类,
如果你没有在 admin后台找到设置的 model,需要在 admin.py
文件中注册 model,例如 Article :
# admin.py
from django.contrib import admin
from .models import Article, Category, Tag
# Register your models here.
admin.site.register(Article)
# 省略 ...
图片文件上传后的路径
file uploads/img/2018/11/06/t1.png
uploads/img/2018/11/06/t1.png: PNG image data, 862 x 522, 8-bit/color RGB, non-interlaced
文件路径保存在数据库内
设置规则
最后为了在服务器中访问上传的图片文件,需要设置下 url规则。
# 项目 url.py
from django.conf import settings
from django.views.static import serve
urlpatterns = [
# 省略 ...
url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
]
验证
上传图片的url地址: http://127.0.0.1:8000/media/img/2018/11/06/t1.png