Django3.0 ImageField 文件/图片上传配置

按以下步骤操作即可:

1. 配置 settings.py(项目同名目录下)

MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'

注意MEDIA_ROOT不要写成'/media/',因为这样会导致上传的文件被存到服务器的根目录。原则上,还是存到项目目录下吧。

2. 配置 models.py (app下)

在需要 ImageField 的 model 里添加一个字段。

avatar = models.ImageField(upload_to='avatars')

这里 upload_to 表示上传的目录,对于本例,上传后的目录就是:项目根目录/media/avatars
也可以用一个 callable 作为参数:

def user_directory_path(instance, filename):
    # 文件储存路径 MEDIA_ROOT/user_<id>/<filename>
    return '{0}/{1}'.format(instance.user.id, filename)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to=user_directory_path)

3. 配置 urls.py(项目同名目录下)

由于需要对这些上传的文件进行访问,因此需要配置一个url(加号后面的内容):

from django.conf.urls import url, include
from django.contrib import admin
from django.conf.urls.static import static
from . import settings

urlpatterns = [
    url(r'', include('core.urls')),
    url(r'admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

以上几步完成后,你上传文件后,在 templates 中就可以使用:{{ user.profile.avatar.url }}来进行访问了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。