Интеграция plupload в django
Как быть, если необходимо загрузить на сервер несколько файлов? В django есть fieldset, но они настолько рогаты, что пользоваться ими невозможно. Поэтому мы пойдем другим путем.
Для аплоада файлов решил воспользоваться plupload. Посмотрим что же это такое.
The developers of TinyMCE brings you Plupload, a highly usable upload handler for your Content Management Systems or similar. Plupload is currently separated into a Core API and a jQuery upload queue widget this enables you to either use it out of the box or write your own custom implementation.
Звучит неплохо, поэтому приступаем к хакингу. Для начала подготовим простую платформу для удобного аплоада через внутренний механизм django.
*PLACEHOLDERS_PRE_2*
Как видно я не использую ManyToManyField для модели Article, это было бы излишне. Вместо этого используем связь OneToMany.
Создадим форму для аплоада.
*PLACEHOLDERS_PRE_3*
Я исключил из формы поле article, оно не понадобится на этапе сохранения формы, зададим его чуть позже, когда будет инстанс класса Photo.
Определяем нашу модель в админ-части.
*PLACEHOLDERS_PRE_4*
В админ-части джанго очень сложно что-то кастомизировать, и постараться лучше этого вообще не делать, но раз нам надо добавить поле, которое не привязано к модели Article, плюс написать кучу дополнительного кода для инициализации виджета аплоадера, то наверно лучшим способом будет переопределить шаблон формы, унаследовать его от «admin/change_form.html», переопределить необходимые блоки, не забыть при этого сделать вызов {{ block.super }}.
И использовать документацию Plupload для конечной интеграции. Поехали.
*PLACEHOLDERS_PRE_5*
Теперь осталось реализовать только метод загрузки.
*PLACEHOLDERS_PRE_6*
Что мне не удалось это заставить работать через html5, обидно, но и флеш неплохо справляется.
Рабочие исходники лежат на гитхабе.
Напоследок скриншот с внедренным plupload.
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
10 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.