【发布时间】:2011-06-27 16:07:11
【问题描述】:
我正在编写一个带有图片上传功能的大型应用程序。
这是我的模型:
class GallryImage(models.Model):
# ...
image = models.ImageField(max_length=255, upload_to='gallery', height_field='width', width_field='height')
width = models.IntegerField()
height = models.IntegerField()
# ...
这是我处理上传的方式:
image_name = 'image.png';
destination = open(settings.MEDIA_ROOT + '/gallery/' + image_name, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
这段代码有点违反 DRY 原则 - 路径 gallery 重复了两次。
问题:如何重用我在模型中指定的路径 (upload_to='gallery'),这样我就不必在上传处理程序中重复?
我正在使用 python 2.6 和 Django 1.3 beta。
谢谢!
基于 Paulo 回答的解决方案
保存模型实例时,文件会自动上传,所以我要做的就是:
def add(request):
from forms import ImageAddForm
form = ImageAddForm()
if request.method == 'POST':
form = ImageAddForm(request.POST, request.FILES)
if form.is_valid():
image = GalleryImage(
image = form.cleaned_data['image']
)
image.save() # file is uploaded to upload_to dir!
return HttpResponseRedirect(reverse('image_add') + '?image_added=')
else:
form = ImageAddForm()
return render_to_response('gallery/add.html',
locals(),
context_instance=RequestContext(request))
【问题讨论】:
-
为什么要手动保存图片?表单框架应该会为您解决这个问题。
-
@Paulo Scardine,如果您发布一个示例(或指向它的链接)作为答案,我将不胜感激。
标签: python django file-upload dry