2010-07-08 3 views
4

Je veux enregistrer l'image qui, comme été téléchargée via le PaletteGenForm en tant que tel:Django: Enregistrement d'un fichier image à partir d'un formulaire

#Form 
class PaletteGenForm(forms.Form): 
    im = forms.ImageField(required=True) 

#View 
def palette_gen_view(request): 
    PATH_OF_IMAGE_TO_BE_PALETTED= MEDIA_ROOT+ "/tobesaved.png" 
    if request.method == 'POST': 
     form = PaletteGenForm(request.POST, request.FILES) 
     if form.is_valid(): 
      im = Image.open(StringIO(request.FILES['im']['content'])) 
      im.save(PATH_OF_IMAGE_TO_BE_PALETTED, "PNG") 
      #call some functions to generate pallete 
      return #returns the palette of the image. 
    else: 
     form = PaletteGenForm() 
    return render_to_response('palette_generate.html', {'form': form,}) 

Cependant voici mon erreur lorsque vous appelez cette URL:

'InMemoryUploadedFile' object is unsubscriptable 
+0

avez-vous un stacktrace? –

Répondre

4

Essayez ceci:

im = Image.open(StringIO(request.FILES['im'].read())) 
+0

Merci pour la suggestion, voici ce que je reçois après avoir changé à la vôtre: TypeError à/Palet/ objet « module » est pas appelable – Hellnar

+1

semble que vous rencontrez « StringIO d'importation » dans votre code au lieu de « de StringIO importer StringIO '. – Ashok

1

Je ne sais pas vous avez besoin de l'envelopper dans un StringIO du tout. Essayez d'

im = Image.open(request.FILES['im']['content']) 
+0

sans emballage je reçois toujours la même erreur: TypeError à/Palet/ objet « InMemoryUploadedFile » est unsubscriptable – Hellnar

0

essayez de lire les données de la forme cleaned_data

im = Image.open(StringIO(form.cleaned_data['im'].read())) 

pour moi cela a fonctionné (n'a pas essayé la lecture de la demande)

+0

c'est le même que la réponse Alexander Artemenko, peut vous fournir le retraçage complet pour voir quelle ligne donne l'erreur: TypeError dans l'objet/palet/'module' n'est pas appelable – Ashok

Questions connexes