本文是小编我多年用Django开发Web APP血与泪的教训,定能帮你解决Django项目中上传图片不成功,不能显示或不能更新的问题。9项检查成为你防身避免入坑必备技能。
1. 首先确保使用pip安装了python的图片库pillow
这是最基本的需求。
2. 确保模板中表单包含了enctype="multipart/form-data"的属性
否则表单无法上传图片或文件。
<form method="post" action="" 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"方式显示图片.
<img class="img-responsive" src="{{ object.avatar.url }}">
如果使用静态文件夹里的图片(非django上传),使用static方式, 如下所示,不过千万别忘了在模板里加入 {% load static %}标签。
<img src=" {% static '/users/images/default.jpg' %}" alt="{{ 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
转载:https://blog.csdn.net/weixin_42134789/article/details/103676162