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