Django - HTTP загрузка нескольких изображений
Я посмотрел на этот вопрос:
Загрузка нескольких файлов с Django
но это, похоже, не помогло, так как у меня есть вопросы, касающиеся этого:
- Я не хочу иметь дело с флэш-сессиями, использующими SWF Upload и Uploadify, потому что мне нужно делать загрузки, которые могут делать только аутентифицированные пользователи.
- 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 ответа
Если у вас есть фиксированное количество файловых полей, вы можете просто определить форму с достаточным количеством файловых полей или добавить программные поля программно в конструктор формы. Смотрите Django документы по загрузке файлов.
Если вам нужна какая-то динамическая функциональность (например, "добавить еще один файл"), вы можете определить набор форм, используя форму с одним полем файла. Первоначально отобразите одну форму, а когда вы хотите добавить другую, используйте небольшой JavaScript, чтобы создать новую форму и обновить форму управления набора форм. Есть несколько фрагментов, которые помогут вам в этом, хотя они могут нуждаться в настройке. Смотрите документацию Django по загрузке файлов и формам.
Другим вариантом может быть использование пользовательского виджета и поля, хотя я не проверял и не пробовал это.
На случай, если вы не в курсе, схема name="image[]" специфична для PHP и не имеет никакого особого значения в других языках, если вы не переопределите ее.
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 объясняет, как