Доступ к неизвестным аргументам запроса в Python

Я использую 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 ответа

Решение

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

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

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

input_values = []
for i in range(1, number_of_values + 1):
  input_values.append(self.request.get('input_%d' % i))

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

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

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
>>>
Другие вопросы по тегам