Доступ к неизвестным аргументам запроса в Python - PullRequest
1 голос
/ 07 июля 2011

Я использую Jinja2 для создания формы с переменным числом входов, помеченных как input_1, input_2 и т. Д. Используя Google App Engine (python), я пытаюсь получить доступ к значениям этих входов в моем обработчике запросовиспользуя self.request.args.get().

Однако, в зависимости от количества входных данных, сгенерированных формой, сценарию необходимо прочитать несколько переменных.Сценарий знает, сколько их будет, поэтому вопрос заключается в том, как использовать переменную переменную в цикле for для их эффективного чтения.

То, что мне нужно, концептуально так:

for x in total_inputs:
  list.append(input_x)

Конечно, я мог бы просто использовать операторы if для разного числа входов и делать имена переменных вручную, но это кажется ужасно неуклюжим - несомненно, есть лучший способ?

Многиеспасибо

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Вы можете сделать это с форматированием строки, например так:

num = 5
tag = 'input_%d' % num

Таким образом, чтобы собрать список значений всех тегов input_x, вы можете сделать что-то вроде этого:1006 *

Предполагается, что вы знаете, сколько значений получить.Ваш вопрос предполагает, что вы это делаете, но в случае, если вы этого не сделали, вы можете перебирать результаты, пока не получите пустую строку (возвращаемое значение по умолчанию от request.get для несуществующей метки).: Приведенный выше комментарий предполагает, что вы используете веб-приложение.Другие структуры могут выдавать KeyError, если вы попытаетесь вызвать get для аргумента, который не существует и не указан по умолчанию.

0 голосов
/ 07 июля 2011
for x in total_inputs: list.append (locals () ['input_%d' % x] )

или если вам нужен словарь с именем переменной в качестве ключа и его значением в качестве значения:

vars = {}    
for x in total_inputs: vars ['input_%d' % x] = locals () ['input_%d' % x]

Вот несколько рабочих примеров в python2.6:

>>> input_0 = 'a'
>>> input_1 = 4
>>> input_2 = None
>>> for x in range (3): print locals () ['input_%d' % x]
...
a
4
None
>>>
...