Django上传图片不成功,不能显示,不能更新等问题解决方案总结

轻编程在最初学习django开发的时候,被上传图片这个问题折磨了很长时间,这份技术总结可以说是我对上传图片不成功、不显示、不更新这类问题血与泪换来的技术经验,今天分享给大家,避免遇到同样的坑。

Django上传图片不成功,不能显示,不能更新等问题解决方案总结

1、确保安装了pillow图片库,Django图片依赖这个库

pip3 install pillow

2、确保项目settings.py设置了****STATIC_URL****和****MEDIA****文件夹

# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATICFILES_DIRS = [    os.path.join(BASE_DIR, "static"),]
# media_confige
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

3、确保项目****settings.py****配置项****TEMPLATES****下的****OPTIONS****下的****context_processors****中添加了如下配置,加入这个之后,调用图片路径时可以使用{{ MEDIA_URL }}{{ object.img }}的方式拼接图片路径。

'django.template.context_processors.media',

4、确保项目的urls.py文件中加入了如下配置

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [    
    path('admin/', admin.site.urls), 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

5. 在模板中使用正确代码显示图片

如果是用户通过django上传的图片, 使用src="{{ MEDIA_URL }}{{ object.img }}"方式显示图片.


如果使用静态文件夹里的图片(非django上传),使用static方式, 如下所示,不过千万别忘了在模板里加入 {% load static %}标签。

{{ user.username }}

6. 确保模板中表单包含了enctype="multipart/form-data"的属性

否则表单无法上传图片或文件。

7. 处理图片上传的视图函数进行表单结合时别忘了加request.FILES。

if request.method == "POST":    
    pf = PictureForm(request.POST, request.FILES)

8. 确保模型里自定义了****upload_to****选项

img = models.ImageField(upload_to=user_directory_path, verbose_name="avatar")

9. 确保Linux服务器上media文件夹用户有读写的权限。

一般用户上传的图片都在media文件夹,如果权限不对是无法上传的。如果没有权限可使用如下命令查看和更改media夹权限

  • ls–la /path/to/media/ # 查看权限
  • sudo chown www-data:www-data media #unix默认user和group都是www-data
  • sudo chmod 770 media

10. 如果是更新图片实例,别忘了加入instance

instance=profile, data=request.POST, files=request.FILES.

if request.method == "POST":    
    opf = PictureForm(instance=profile, data=request.POST, files=request.FILES)

你可能感兴趣的:(Django上传图片不成功,不能显示,不能更新等问题解决方案总结)