Django上传图片后无法显示(已解决)

——使用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 %}



    
    pic_upload&show



 
{% csrf_token %}

{% for i in imgs %} {% endfor %}

网页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上传图片后无法显示(已解决)_第1张图片
然后我尝试在网页修改了路径,能成功找到我的图片了,虽然网页没有自动同步刷新,网页上仍然不显示图片:
Django上传图片后无法显示(已解决)_第2张图片
出现问题如下:
但是Django会一直提示404 报错:
Django上传图片后无法显示(已解决)_第3张图片

"GET /static/img/%20/home/ann/Desktop/mysqltest/test2/static/img//booktest/liuwen3_Kwj8wxG.jpg HTTP/1.1" 404 1852

咨询大神,他说可能是Ubuntu的写法不太一样,让我尝试了“写法2”(本来是用写法1)但是也不行
可以正常上传文件,数据库里也是有图片数据在的,工程文件夹的对应位置也能看得到图片,
但是网页上无法显示

Django上传图片后无法显示(已解决)_第4张图片

解决方法:
view.py改一下fname = f’booktest/{pic.name}’
html页面也改一下
同时要注意settings.py 里的MEDIA_ROOT的media后面不要加/
(这是因为,加了以后在实际路径显示会重复出现/,就是变成了static/media//booktest)
在这里插入图片描述
Django上传图片后无法显示(已解决)_第5张图片成功!

你可能感兴趣的:(python-Django)