2012-03-03 2 views
0

sorl-thumnail을 사용하여 뷰의 이미지 크기를 조정하고 저장하고 get_thumnail()을 호출하는 동안 IOError를 가져 오려고합니다. 또한 크기가 조정 된 이미지를 저장하는 방법을 알아야합니다. 미안해. 이거 바보 같아. 난 장고가 처음인데.sorl-thumnail 크기 조정 및 저장

Models.py :

from django.db import models 
from django.forms import ModelForm 
from sorl.thumbnail import ImageField 

class BasicModel(models.Model): 
    name = models.CharField(max_length=200) 
    dob = models.DateField() 
    photo = ImageField(upload_to='sample') 

class BasicModelForm(ModelForm): 
    class Meta: 
      model = BasicModel 

Views.py :

def BasicView(request): 
    if request.method == 'POST': 
      form = BasicModelForm(request.POST, request.FILES) 
      if form.is_valid(): 
        im = get_thumbnail(request.FILES['photo'], '100x100', crop='center', quality=99) 
        data = form.save() 
        return preview(request, data.id, im) 
    else: 
      form = BasicModelForm() 
    return render_to_response("unnamed.html", {'form': form}, context_instance=RequestContext(request)) 

def preview(request, id, im): 
    obj = get_object_or_404(BasicModel, pk=id) 
    return render_to_response("preview.html", {'obj': obj, 'im': im}) 

preview.html :

{{ obj.name }} 
{{ obj.dob }} 
{% load thumbnail %} 
{% thumbnail im "100x100" as image %} 
<img src="{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}"> 
{% endthumbnail %} 

Settings.py :

MEDIA_ROOT = '/home/nirmal/try/files/' 
MEDIA_URL = 'http://localhost:8000/files/' 

오류 :

Exception Type: IOError 
Exception Value:  
[Errno 2] No such file or directory: u'/home/nirmal/try/files/wp.jpg' 
Exception Location: /usr/local/lib/python2.7/dist-packages/django/core/files/storage.py in _open, line 159 
Traceback: im = get_thumbnail(request.FILES['photo'], '100x100', crop='center', quality=99) 

이 사람이 나를 도울 수 있을까요? 감사합니다.

답변

1

업로드 된 파일이 메모리 또는 다른 곳에있을 수 있으므로 request.FILES [ 'photo']를 사용할 수 없습니다. 이 파일을 먼저 파일 시스템에 저장 한 다음 get_thumbnail을 사용하십시오. 예를 들어, form.save()가 반환 한 객체를 호출 할 수 있습니다.

+0

감사 :

import os import tempfile def _file_path(uploaded_file): ''' Converts InMemoryUploadedFile to on-disk file so it will have path. ''' try: return uploaded_file.temporary_file_path() except AttributeError: fileno, path = tempfile.mkstemp() temp_file = os.fdopen(fileno,'w+b') for chunk in uploaded_file.chunks(): temp_file.write(chunk) temp_file.close() return path 

는 그런 다음 경로에 업로드 된 파일에 액세스 할 수 있습니다 – rnk

0

업로드 된 파일에 직접 액세스하려면 먼저 업로드 된 임시 메모리의 경로를 얻어야합니다. 작업 ilvar..its @

path = _file_path(request.FILES['photo']) 
관련 문제