Estoy trabajando con un formulario Django usando dropzone para cargar imágenes. Pero no quiero agregar la zona de descenso a todo el formulario, solo a una parte del mismo. Aquí está la plantilla:
{% extends 'base.html' %} {% load static %} {% load i18n %} {% block content %} <h6>UPLOAD MULTIPLE IMAGES NOW</h6> <br> <div class="formdiv" style="width:100%"> <form enctype="multipart/form-data" action="upload/" methd="POST"> {% csrf_token %} <fieldset> <label for="yourname">Yourname <input type="text" value="name" /> </label> <div class="dropzone dz" id="my-dropzone"> <div class="dz-message" data-dz-message><span>{% trans "Drop here or click to upload" %}</span></div> <div class="fallback"> <input name="file" type="file" multiple /> </div> </div> </fieldset> </form> </div> {% endblock %}El problema es que cuando intento subir cualquier imagen me sale un mensaje de error de Prohibido con el siguiente texto:
CSRF token missing or incorrect. Tenga en cuenta que si class="dropzone dz" id="my-dropzone" del div y lo coloco dentro de la etiqueta <form> , todo funcionará. El problema comenzó exactamente cuando moví Dropzone en un div porque no quería que se aplicara a todo el formulario.
Aquí está mi código de configuración de dropzone:
Dropzone.autoDiscover=false; const myDropzone = new Dropzone('#my-dropzone',{ url:'upload/', maxFiles:15, maxFilesize:5, // 5 mb max //parallelUploads:2, // if image is horizontal, then resize it if it's more than resizeWidth resizeWidth:1024, // if the image is vertical, then resize if it's more than resizeHeight resizeHeight:1024, // also they can be mime such as image/png acceptedFiles: ".png,.jpg,.gif,.bmp,.jpeg,.webp", // default is false and it allows to delete uploaded files addRemoveLinks: true, // this is the element where the remove button or text will be located dictRemoveFile: "<div><span class='fa fa-trash text-danger' style='font-size: 1.5em;cursor:pointer'></span></div>", /* the following solution failed headers: { 'X-CSRFToken': $('meta[name="token"]').attr('content') } */ });¿Qué tengo que hacer para solucionar este problema?
Al mirar los documentos de Django, veo que se llama X-CSRFToken no X-CSRF-TOKEN . Intente arreglar eso y descomentar su código de encabezado.
El código que veo en los documentos para obtener el token es document.querySelector('[name=csrfmiddlewaretoken]').value intenta reemplazar el tuyo con eso. Solo asegúrese de tener {% csrf_token %} en alguna parte de su página.