Django上传图片不成功,不能显示或不能更新问题汇总及解决方案集锦

本文是小编我多年用Django开发Web APP血与泪的教训,定能帮你解决Django项目中上传图片不成功,不能显示或不能更新的问题。9项检查成为你防身避免入坑必备技能。

1. 首先确保使用pip安装了python的图片库pillow

这是最基本的需求。

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

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

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

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

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

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

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

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# Media files
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

6. 确保项目urls.py在development阶段使用本地static服务器serve静态文件(包括图片)

# added to show static files
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
]

if settings.DEBUG:
    urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

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

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

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

{{ user.username }}

8. 确保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

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

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


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

希望本文对大家有所帮助,提前祝大家圣诞快乐。

大江狗

2019.12.23

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