Я пишу большое приложение с загрузкой изображений.
Вот моя модель:
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()
Этот код, в некотором роде, нарушает принцип СУХОГО - путь gallery
повторяется дважды.
Вопрос: как мне использовать путь, указанный в моей модели (upload_to='gallery'
), чтобы мне не пришлось повторять в обработчике загрузки?
Я использую Python 2.6 и Django 1.3 beta.
Спасибо!
Решение, основанное на ответе Пауло
Когда экземпляр модели сохраняется, файл загружается автоматически, поэтому все, что мне нужно сделать, это:
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))