Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

162
Vistas
El formulario Dropzone no se manejó correctamente

Tengo una pequeña aplicación django: el usuario carga un archivo, el archivo se modifica en el lado del servidor y el archivo modificado se devuelve al usuario como descarga. Para proporcionar un buen formulario de carga de archivos de arrastrar y soltar, uso dropzone.js. El formulario contiene otros elementos de entrada, así que seguí este howto . Después de enviar el formulario, la vista Django devuelve un objeto HttpResponse:

 response = HttpResponse(f.read(), content_type="application/pdf") response['Content-Disposition'] = 'attachment; filename="%s"' % input_file

Mi problema es: si uso el formulario basado en dropzone, la respuesta no se muestra, es decir, el navegador no muestra un cuadro de diálogo de descarga.

Aquí está el ejemplo mínimo de mi archivo html:

 <form method="post" class="dropzone" action="/mysite/" enctype="multipart/form-data" id="myForm"> {% csrf_token %} <select name="selectpdf" size="1"> // filled by django magic </select> <p><button type="submit">Do it!</button></p> </form> <script type="text/javascript"> Dropzone.options.myForm = { // Prevents Dropzone from uploading dropped files immediately autoProcessQueue : false, forceFallback : false, init : function() { myDropzone = this; this.element.querySelector("button[type=submit]").addEventListener("click", function(e) { // Make sure that the form isn't actually being sent. e.preventDefault(); e.stopPropagation(); myDropzone.processQueue(); }); } }; </script>

Cuando uso un formulario HTML normal (es decir, sin class="dropzone" y usando un campo de carga de archivos estándar), todo funciona perfectamente. Además, si activo el modo alternativo de dropzones (que básicamente hace lo mismo), todo está bien. Por lo tanto, supongo que el problema no está relacionado con la parte de django.

Después de presionar el botón Enviar, observo que myDropzone.processQueue(); se ejecuta correctamente (porque el archivo se carga) y el archivo cargado se maneja correctamente en el lado del servidor (es decir, el archivo se modifica y se genera y devuelve la HttpResponse adecuada). Sin embargo, el cliente nunca lo ve. También observé que el formulario parece estar en un estado incorrecto, porque si presiono el botón de enviar nuevamente, no sucede nada.

Para mí, parece que falta alguna redirección final del lado del cliente basada en JavaScript, que se hace implícitamente cuando se usa el método HTML simple.

De acuerdo con el howto, puedo capturar ciertos eventos como

 this.on("success", function(files, response) { ... }

para redirigir al usuario. Pero, de hecho, no quiero redirigirlo, quiero el mismo comportamiento que con el método HTML simple (es decir, permanecer en el sitio, completar el formulario, proporcionar la descarga y poder presionar el botón Enviar nuevamente) .

¿Alguien puede ayudar?

about 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda