Насчёт загрузки файлов вроде более-менее понятно - https://docs.djangoproject.com/ja/1.9/topics/http/file-uploads/
Но вот вопрос, единственный ли это способ? Можно ли как-то передать файлы с помощью JQuery в стиле:
$.post('send_files', files).done(делаем что-то).fail(делаем что-то другое)
Вот, нашел такое на stackoverflow:
http://stackoverflow.com/questions/20822823/django-jquery-ajax-file-upload
Использовал ту ajax-функцию, но в браузере в Post не показывает файла, есть лишь csrf-token и другие поля формы, но только не файл. Возможно, имеет смысл спросить на JS/JQuery форумах…
Вот, такой код заработал и отослал файл:
var csrftoken = document.getElementsByName('csrfmiddlewaretoken')[0].value var formData = new FormData($("#send_file_form")[0]); var formData = new FormData(); formData.append("file", $('#file_input')[0].files[0]); formData.append("csrfmiddlewaretoken", csrftoken); $.ajax({ type: "POST", url: "send_files", data: formData, contentType: false, processData: false, });
Как видно, он отсылает первый файл, ну в теории, циклом пройтись и подобавлять в форму можно все файлы. Главное, что django приняло файл в request.FILES переменную. Теперь надо подпилить всё немного, может чего доброго и выйдет.
Таки вышло, вот так пока-что работает, нужно ещё украсить:
var formData = new FormData($("#scan_files_form")[0]); var formData = new FormData(); var files = $('#files')[0].files; for (var i = 0; i < files.length; i++) { var file = files[i]; formData.append('files', file, file.name) } var csrftoken = $('#csrftoken').val(); formData.append("csrfmiddlewaretoken", csrftoken); var description = $('#description').val(); formData.append("description", description); $.ajax({ type: "POST", url: "scan_files", data: formData, contentType: false, processData: false, });
В Django (версия 1.5) вот прием:
file_list = request.FILES.getlist('files')
Ну и сама форма должна быть с такими параметрами:
<form id="scan_files_form" enctype="multipart/form-data" method="post" name="scan_files_form">
Теперь можно приступать ко второй части - передачу этих файлов дальше.