Django - HTTP загрузка нескольких изображений - PullRequest
0 голосов
/ 05 апреля 2011

Я посмотрел на этот вопрос:

Загрузка нескольких файлов с помощью Django

но это, похоже, не помогло, так как у меня есть проблемы по этому поводу:

  1. Я не хочу иметь дело с флэш-сессиями с использованием SWF Upload и Uploadify, потому что мне нужно делать загрузки, которые могут делать только аутентифицированные пользователи.
  2. newforms для более старых версий django, я использую 1.3

Используя Django, как мне получить эту структуру HTML-формы:

<form enctype="multipart/form-data" action="." method="post">
 <label for="id_image_1">Image 1</label>
 <input type="file" name="image[]" id="id_image_1" />

 <label for="id_image_2">Image 2</label>
 <input type="file" name="image[]" id="id_image_2" />
</form>

и обработать это с помощью представления?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Если у вас фиксированное количество файловых полей, вы можете просто определить форму с достаточным количеством файловых полей или добавить программные поля программно в конструкторе формы. См. Документы Django на Загрузка файлов .

Если вам нужна какая-то динамическая функциональность (например, «добавить еще один файл»), вы можете определить набор форм, используя форму с одним полем файла. Первоначально отобразите одну форму, а когда вы хотите добавить другую, используйте небольшой JavaScript, чтобы создать новую форму и обновить форму управления набора форм. Существует число из фрагментов , плавающих , чтобы помочь вам сделать это, хотя им может потребоваться некоторая настройка. См. Документы Django на Загрузка файлов и Formsets .

Другим вариантом может быть использование пользовательского виджета и поля , хотя я не проверял и не пробовал это.

На случай, если вы не в курсе, схема name = "image []" специфична для PHP и не имеет специального значения в других языках, если вы не переопределите ее.

0 голосов
/ 05 апреля 2011

newforms - это то, что текущие формы назывались до 1.0. Более того, если вы подтвердили свою форму, http://docs.djangoproject.com/en/dev/topics/http/file-uploads/, ваши файлы будут представлены в виде списка (возможно, кортеж, но в любом случае последовательность) в request.FILES ['image'], так что просто выполните:

if request.method == 'POST':
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
       for f in request.FILES['image']:
           handle_uploaded_file(f)

Вам придется написать handle_uploaded_file самостоятельно, URL объясняет, как

...