2009-12-31 21 views
5

No estoy seguro de si solo estoy alterando la construcción o no estoy pensando en esto de la manera correcta. Estoy intentando crear un formulario similar al formulario 'redactar' de Gmail que tiene un cargador de imágenes AJAX. Tengo una parte del código que carga la imagen y devuelve una ID de imagen funcionando bien. Una vez que recibo el ID de imagen, intenté anexarlo a mi formulario en un campo de casilla de verificación oculto. Quiero permitir a los usuarios subir varias imágenes, y también me gustaría mantener todas mis casillas de verificación ocultas con el mismo nombre para que pueda iterar fácilmente sobre los valores. Esencialmente esto:HTML Form Building/solicitud de Django.POST ayuda

lado del cliente (esto es de Gmail, pero en la mía éstos estarán ocultos): cara

<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.2_-1" name="attach" id=":4s"/> 
<input type="checkbox" checked="" value="125e6e5e7d8a2601_125e6e5e7d8a2601_0.1_-1" name="attach" id=":50"/> 

Servidor:

 for picture_id in request.POST["attach"]: 
      #do stuff here with the picture_id 

Por desgracia, sólo recibe uno de los picture_ids y solicitud .POST ["attach"] itera sobre él como una cadena. No estoy seguro de cómo resolver mi problema y enviar todas las ID de imágenes sin usar algo como un formulario <select> donde se pueden seleccionar varios elementos porque tendré que agregar elementos manualmente y seleccionarlos.

Afortunadamente esta explicación es clara, estoy seguro de que me estoy perdiendo algo trivial. ¡Gracias por la ayuda por adelantado!

Respuesta

17

Si es expecting a list para la clave attach, debe usar request.POST.getlist('attach'). Hacer request.POST['attach'] solo le dará el último valor, que es una cadena.

¡Feliz año nuevo!

+0

+1: ¡Acabo de aprender algo nuevo sobre POST! Gracias! –

+0

¡Muchas gracias, esto es exactamente lo que estaba buscando! :) –

+0

+1: por estar en su computadora en años nuevos – Sevenearths

0

Una vez más señalaré a mi viejo amigo el jQuery taconite plugin. Si está utilizando AJAX para enviar la imagen al servidor, intente devolver una respuesta taconite que realice varios cambios (pegue la ID en un lugar, anexe input en otro lugar, etc.) a su DOM. También puede ejecutar JS para hacer otras cosas dentro del entorno de la página. Muy, muy útil.

Por lo que respecta al uso del mismo nombre para múltiples campos input, no estoy seguro de que funcione de la manera que le gustaría. Utilizando el complemento Live HTTP Headers para Firefox, puedo ver foo=1&foo=2&foo=3&foo=4&foo=5&foo=6 pasando el , pero tanto PHP como Django solo entregan el último valor, no una matriz. Puede intentar crear nombres como "attach_1", "attach_2", etc. y simplemente recorrer sus valores POST y extraerlos de esa manera. O eso u obtenga los datos de POST sin procesar y analícelos usted mismo.

Vea la respuesta de elo80ka sobre cómo hacer esto. (¡¡¡Aprende algo nuevo todos los días!)