2011-04-21 18 views

Respuesta

9

request.FILES.get('filename', None) responde a la existencia de un campo de formulario con nombre de la siguiente manera:

<input type="file" name="filename"></input> 

Si tuviera dos de estos campos:

<input type="file" name="file1"></input> 
<input type="file" name="file2"></input> 

Entonces request.FILES.get('file1', None) y request.FILES.get('file2', None) deben darle esos archivos respectivamente.

El motivo es el mime multiparte. Las tres partes (datos de formulario, archivo1, archivo2) deben cargarse y UploadFileHandler de Django divide esto en request.POST y request.FILES respectivamente.

+0

no funciona, lo hago de esta manera. 'newsform = NewsAddForm (request.POST o None, request.FILES.get (' image_news1 ', None), request.FILES.get (' image_news2 ', None))' – Aryan

29

Llego tarde a la fiesta, pero he estado tratando de resolver esto por un tiempo y finalmente tengo una solución. Eche un vistazo al código usado aquí: https://code.djangoproject.com/ticket/12446

Puede acceder a valores de varias partes con la lista de resultados. Si mi formulario HTML fue:

<form enctype="multipart/form-data" action="" method="post"> 
<input type="file" name="myfiles" multiple> 
<input type="submit" name="upload" value="Upload"> 
</form> 

Mi código de Django para procesar que se vería así:

for afile in request.FILES.getlist('myfiles'): 
    # do something with afile 

Escribir un campo de formulario/widget para manejar esto correctamente es mi siguiente paso. Todavía soy bastante nuevo para usar Django, así que estoy aprendiendo sobre la marcha.

+0

¿Cómo haces eso? puedes mostrar el ejemplo? Quiero que el usuario del artista cargue varios archivos al mismo tiempo en la misma forma. –

0

Aquí hay un buen enlace para esta respuesta: https://github.com/Chive/django-multiupload. Sin embargo, como no estaba usando ModelForm, tuve que hacer algunos cambios. En vista, he escrito debajo del código y guardado los archivos en el disco:

for each in form.cleaned_data['attachments']: 
    handle_uploaded_file(each) 

def uploadMyWork(request): 
    from .forms import UploadFileForm, handle_uploaded_file 
    print 'in uploadMyWork' 

    if request.method == 'GET': 
     print 'in uploadMyWork : GET' 
     form = UploadFileForm() 
    else: 
     form = UploadFileForm(request.POST, request.FILES) 
     print 'in uploadMyWork : POST' 
     #for each in form.cleaned_data['attachments']: 
     # handle_uploaded_file(each) 
     #return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"}) 

     if form.is_valid(): 
      print 'inside form valid' 
      for each in form.cleaned_data['attachments']: 
       handle_uploaded_file(each) 
      return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"}) 

    print 'returning to uploadmywork' 
    return render(request, 'stitchme/uploadMyWork.html', {'form': form, 'msg':'hi'}) 
Cuestiones relacionadas