Как получить конкретные аргументы POST с GAE? - PullRequest
0 голосов
/ 07 августа 2011

Пользователь загружает неизвестное количество файлов в мое приложение GAE (фотографии + их описания). Форма содержит

<input type=hidden name="{{ item.photo_imgsrc_1280 }}" id="file{{ forloop.counter }}">
<input type=hidden name="desc{{ forloop.counter }}" value="{{ item.description }}">

(на самом деле значение имени заменено Picasa содержимым файла)

Теперь в обработчике загрузки мне нужно найти соответствующее описание для каждого файла. В настоящее время я делаю:

files_counter = 0
for argument in arguments:
    if 'localhost' in argument: # choose files only, not other fields - Picasa related approach
        files_counter +=1
        # self.request.get(argument) here returns the file
        # self.request.get('desc'+str(files_counter))) can return some other description, not 
        # related to the file above

Как я могу это исправить?

1 Ответ

2 голосов
/ 07 августа 2011

Вам не нужны разные имена для каждого скрытого поля. Вы можете иметь одно и то же имя несколько раз, и получить их все. Итак, давайте немного изменим ваши поля:

<input type=hidden name="{{ item.photo_imgsrc_1280 }}" id="file{{ forloop.counter }}">
<input type=hidden name="photo" value="{{ item.photo_imgsrc_1280 }}">
<input type=hidden name="description" value="{{ item.description }}">

Затем получите все значения для полей photo и description:

photo_names = self.request.POST.getall('photo')
descriptions = self.request.POST.getall('description')

Здесь photo_names - список имен полей с фотографиями. Чтобы получить действительные поля изображения, вы должны сделать что-то вроде:

photos = [self.request.POST.get(name) for name in photo_names]

Теперь вы можете сгруппировать их в список кортежей (photo, description) и выполнять итерацию один за другим:

data = zip(photos, descriptions)
for photo, description in data:
    # do what you need with each single photo/desc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...