您的位置:首页 > 编程语言 > Go语言

django的文件 图片上传(简单方法)

2010-08-18 13:44 357 查看

django的文件 图片上传

一直以为django的文件跟图片上传问题很麻烦,在网上找了好久,找了很多麻烦的方法 但是效果还不好,今天在无意中突然发现其实很简单,简单的要死! 晕!

以前我是这样写views的: (这是在有forms.py的情况下 )

from PIL import Image

from juxin import settings

f = request.FILES["file"] (如果是直接上传的话<没有forms.py>用request.FILES.get['file'])

parser = ImageFile.Parser()

for chunk in f.chunks():

parser.feed(chunk)

img = parser.close()

name = '%s%s' % (settings.MEDIA_ROOT, f.name) ##这里的时保存文件的路径加名字!

img.save(name)

这种方法可以将图片保存到你想要的位置,也可以是文件!但是怎么在templates上显示上传的图片就是个麻烦问题,要重新设置MEDIA_ROOT,跟STATIC_ROOT,所以不推荐使用!

下面介绍最简单的方法!!!

那就是!!!:::

1:当然要先设置models.py

image= models.ImageField(upload_to='photos/%Y/%m/%d', blank=True,null=True)

这里的upload_to是必须的参数,他会把上传的文件保存到MEDIA_root +upload_to后便的路径,

2:然后设置跟form.py

image = forms.ImageField(required=False)

3:前台的是这样的post数据

<form action="/upload/" method="post" enctype="multipart/form-data">这个是一定要有的,如果你还要上传文字或者其他的东西,在form中间加就行了,比喻<legend>标题</legend> <input type="text" name="title" id="title">

<form>

<fieldset>

<legend>上传文件</legend>

<input type="file" name="docfile" />

<input type="submit" value="上传"/>

</fieldset>

</form>

4:再就是views.py了,要先导入forms中的类!

if 'file' in request.FILES: 这里是重点!为什么我要判断file呢?因为如果你想不传文件(也就是字段为空),但是还是要传其他的字段(如:我只想传标题,而图片我不传), 那么必 须要判断下。不然会报错"Key 'file' not found in <MultiValueDict: {}>"

image = request.FILES["file"]

else:

image=None

然后把得到的图片保存到数据库,django保存的知识图片或者文件的url,图片保存在本地计算机上,这样提高django运行效率,s=Info(image=image)

s.save()

5: 最后一步就是让图片在templates中显示了!!!!

{% if info.image %}<img src='{{ info.image.url }}' />{% endif %}

在django book里说得到图片的绝对路径是这样的:{{info.get_image_url}},这个是错误的!!这个是0.9版本的用法!

当然 这里也要做下判断,如果image为null的话,他就不显示,注意: 这里判断的不是{% if info.image.url %}!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐