Django中图片上传不保存文件
上传的时候没有报错。但是,图片并没有出现在我指定的位置。我在MEDIA_ROOT里放了一个绝对路径,并在ImageField的(upload_to)参数中引用了这个路径。不太确定我漏掉了什么。
模型:
class FileUploadHandler(models.Model):
title = models.CharField(max_length=100)
file = models.ImageField(upload_to='/Python27/Lib/site-packages/django/bin/mideastinfo/wiki/static/')
视图:
from models import Article, Edit
from forms import ArticleForm, EditForm
from forms import *
from PIL import Image
from models import FileUploadHandler
def image_upload(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
FileUploadHandler(request.FILES['image'])
return render_to_response('wiki/gallery.html')
else:
form = UploadImageForm()
return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))
表单.py:
class UploadImageForm(forms.ModelForm):
class Meta:
model = FileUploadHandler
#image = forms.ImageField()\
fields = ['title']
3 个回答
0
这个解决方案可能是这样的模板:
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<input type="submit" name="submit" value="Submit" />
</form>
注意:enctype="multipart/form-data"
这个设置很重要哦。
0
我觉得你可能有点儿用力过猛。其实你不需要直接调用FileUploadHandler模型来保存图片。
首先,你的表单应该是:
class UploadImageForm(forms.ModelForm):
class Meta:
model = FileUploadHandler
然后你的视图应该是:
from forms import UploadImageForm
def image_upload(request):
form = UploadImageForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))
因为你在使用ModelForm,所以只需要在表单验证通过后保存它就可以了。确保在你的模板中文件字段是可见的。之前你在表单中排除了'file'字段,所以才没法正常工作。
更新:我把你的视图进一步简化了,仅仅是因为……
0
这里你没有把它保存在视图中。只需使用这个:
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
newfile = FileUploadHandler(title='anything', file=request.FILES['image'])
newfile.save()