Задать вопрос
@howuu

Drag and drop с помощью jQuery в Django?

Сделал Drap and Drop форму в Django, но не работает append файлов в html, когда они загружены без перезагрузки страницы и выдает ошибку в консоли
spoiler
jquery.min.js:2 POST 127.0.0.1:8002/drag_and_drop_upload 500 (Internal Server Error)

Я не знаю в каком коде проблема, в js, python или моем генетическом, поэтому скину, что есть, сам способ и код такого Drap and Drop я взял отсюда
views.py
import time

from django.shortcuts import render, get_object_or_404, redirect
from django.http import JsonResponse
from django.views import View

from .forms import PhotoForm
from .models import Photo


class DragAndDropUploadView(View):

    def get(self, request):
        photos_list = Photo.objects.all()
        return render(self.request, 'base.html', {'photos': photos_list}) 

    def post(self, request):
        form = PhotoForm(self.request.POST, self.request.FILES)
        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}
        else:
            data = {'is_valid': False}
        return JsonResponse(data), redirect('/drag_and_drop_upload')


html

<div class="container">


<div id="drop-area">
<div style="text-align: center;">
  <form enctype="multipart/form-data" method="post" class="my-form">
    <p style="text-align: center;">Кидай файли в мене</p>
    <input id="fileupload" type="file" name="file" multiple
         accept="image/*"
         style="display: none;"
         data-url="{% url 'drag_and_drop_upload' %}"
         data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>


    <label class="button" for="fileupload">обрати декілька таких</label>
  </form>

<form method="post" action="{% url 'clear_database' %}">
  {% csrf_token %}
  <button type="submit" class="button">Почистити базу даних</button>
</form>
      



</div>  
</div>




     

<div class="card-columns gallery">

  {% for photo in photos %}
  <div class="card ">


    <img src="{{ photo.file.url }}" class="card-img-top" alt="...">
    <div class="card-body">
      <h5 class="card-title"><a href="{{ photo.file.url }}">{{ photo.file.name }}</a></h5>
      {{photo.pk}}
      <a style=" color: green;" href="{% url 'photo_remove' pk=photo.pk %}">в смітничок</i></a>
    </div>
  </div>

  {% endfor %}

</div>
</div>


вот такие скрипты я импортирую
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
    <script src="{% static 'js/fileupload/jquery.ui.widget.js' %}"></script>
    <script src="{% static 'js/fileupload/jquery.iframe-transport.js' %}"></script>
    <script src="{% static 'js/fileupload/jquery.fileupload.js' %}"></script>
    <script src="{% static 'js/drag-and-drop-upload.js' %}"></script>


и вот так выглядит файл drag-and-drop-upload.js
$(function () {

  $(".js-upload-photos").click(function () {
    $("#fileupload").click();
  });

  $("#fileupload").fileupload({
    dataType: 'json',
    done: function (e, data) {
      if (data.result.is_valid) {
        
        $(".gallery").prepend(
          "<div class='card'> <img src='" + data.result.url + "' class='card-img-top' alt='...'>" +  "<div class='card-body'><h5 class='card-title'><a href='" + data.result.url + "'>" + data.result.name + "</a></h5></div></div>"
        )
      }
    }
  });

});


В общем работает все, грузиться на сервер, но я бы хотел, что бы эти файлы отображались сразу, без перезагрузки страницы
  • Вопрос задан
  • 1508 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
netpastor
@netpastor
Python developer
Исходники хорошо, но лучше в браузере найди и выложи полный респонс ошибочного ответа
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы