2012-03-03 19 views
0

私はsorl-thumnailを使って画像をサイズ変更し、保存してget_thumnail()を呼び出す際にIOErrorを取得しようとしています。また、私はサイズ変更されたイメージを保存する方法を知る必要があります。申し訳ありません、もしあなたがこれを愚かだと思ったら...私はDjangoを初めて使っています。サイズ変更と保存

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

感謝を – rnk

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 

次にあなたがパスにアップロードされたファイルにアクセスすることができますilvar..its作業@

path = _file_path(request.FILES['photo']) 
関連する問題