Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
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?

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!