美文网首页Django从入门到精通
Django上传图片不成功,不能显示,不能更新等问题解决方案总结

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

作者: 轻编程 | 来源:发表于2020-06-16 14:09 被阅读0次

    轻编程在最初学习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 }}"方式显示图片.

    <img class="img-responsive" src="{{ MEDIA_URL }}{{ object.img }}">
    

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

    <img src=" {% static '/users/images/default.jpg' %}" alt="{{ user.username }}">
    

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

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

    <form method="post" action="" 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上传图片不成功,不能显示,不能更新等问题解决方案总结

        本文链接:https://www.haomeiwen.com/subject/wizlxktx.html