——使用Ubuntu16.04,pycharm 专业版,django1.8.2——
我想让图片上传成功后,显示在同一个页面,views.py里的函数代码如下:
def pic_upload(request):
if request.method == 'GET':
return render(request, 'booktest/pic_upload.html')
if request.method == 'POST':
pic = request.FILES.get('pic') #获取前端上传的图片
pic_obj = PicTest() #图片对象
#写法2
fname = '%s/booktest/%s' % (settings.MEDIA_ROOT, pic.name)
#写法1
# fname = f'{settings.MEDIA_ROOT}/booktest/{pic.name}' #构建文件上传地址
f = FileSystemStorage() #django自带的文件处理类,自动保存上传的图片
path = f.save(fname, pic) #保存文件并返回文件名,如果文件名存在则创建一个不存在的名字
pic_obj.pic = path
pic_obj.save()
# return HttpResponse('upload successfully')
response = redirect('/pic_show/')
return response
def pic_show(request):
imgs = PicTest.objects.all()
return render(request, 'booktest/pic_upload.html', {'imgs': imgs})
html页面的代码如下:
{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>pic_upload&show</title>
</head>
<body>
<!--表单上传-->
<form action="/pic_upload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="pic" >
<br>
<input type="submit" value="提交" >
</form>
<br>
<!--显示-->
{% for i in imgs %}
<img src="{% static 'img/' %} {{ i.pic }}" alt="">
{% endfor %}
</body>
</html>
网页f12查看network如下:
Request URL:http://127.0.0.1:8000/static/media/booktest/home/ann/Desktop/mysqltest/test2/static/media//booktest/liuwen1.jpg
这里让我怀疑是获取图片的路径出错导致图片无法显示
这一段是图片存放的绝对路径: /home/ann/Desktop/mysqltest/test2/static/media//booktest/liuwen1.jpg

然后我尝试在网页修改了路径,能成功找到我的图片了,虽然网页没有自动同步刷新,网页上仍然不显示图片:

出现问题如下:
但是Django会一直提示404 报错:

"GET /static/img/%20/home/ann/Desktop/mysqltest/test2/static/img//booktest/liuwen3_Kwj8wxG.jpg HTTP/1.1" 404 1852
咨询大神,他说可能是Ubuntu的写法不太一样,让我尝试了“写法2”(本来是用写法1)但是也不行
可以正常上传文件,数据库里也是有图片数据在的,工程文件夹的对应位置也能看得到图片,
但是网页上无法显示

解决方法:
view.py改一下fname = f’booktest/{pic.name}’
html页面也改一下
同时要注意settings.py 里的MEDIA_ROOT的media后面不要加/
(这是因为,加了以后在实际路径显示会重复出现/,就是变成了static/media//booktest)

成功!
在Ubuntu 16.04环境下,使用Django 1.8.2时遇到图片上传后无法在页面显示的问题。经过排查发现是图片路径错误导致,通过调整views.py、HTML页面和settings.py中的相关路径设置,尤其是去除MEDIA_ROOT中'/',解决了404错误,成功显示上传的图片。
1万+





