跳转至

如何在 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

参考

django admin 后台上传图片

回到页面顶部