在Python中访问未知查询参数

在Python中访问未知查询参数,python,google-app-engine,jinja2,tipfy,Python,Google App Engine,Jinja2,Tipfy,我正在使用Jinja2生成一个表单,其中包含可变数量的输入,标记为input_1、input_2等。使用Google App Engine python,我正在尝试使用self.request.args.get访问请求处理程序中这些输入的值 但是,根据表单生成的输入数量,脚本需要读取多个变量。脚本知道会有多少,所以问题是如何在for循环中使用某种变量来高效地读取它们 我所追求的东西在概念上是这样的: for x in total_inputs: list.append(input_x) i

我正在使用Jinja2生成一个表单,其中包含可变数量的输入,标记为input_1、input_2等。使用Google App Engine python,我正在尝试使用self.request.args.get访问请求处理程序中这些输入的值

但是,根据表单生成的输入数量,脚本需要读取多个变量。脚本知道会有多少,所以问题是如何在for循环中使用某种变量来高效地读取它们

我所追求的东西在概念上是这样的:

for x in total_inputs:
  list.append(input_x)
input_values = []
for i in range(1, number_of_values + 1):
  input_values.append(self.request.get('input_%d' % i))
当然,我可以对不同数量的输入使用if语句,并手动指定变量名,但这似乎非常笨拙——肯定有更好的方法吗

非常感谢

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
>>>
或者,如果您想要一个以变量名为键、其值为值的字典:

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
>>>

您可以使用字符串格式执行此操作,如下所示:

num = 5
tag = 'input_%d' % num
因此,要组合所有输入_x标记的值列表,可以执行以下操作:

for x in total_inputs:
  list.append(input_x)
input_values = []
for i in range(1, number_of_values + 1):
  input_values.append(self.request.get('input_%d' % i))
这假设您知道要检索多少个值。您的问题假设您这样做,但如果您没有这样做,您可以迭代结果,直到您得到一个空字符串—对于不存在的标签,request.get的默认返回值


编辑:以上评论假设您正在使用webapp。如果您尝试调用不存在且未指定默认值的参数get,其他框架可能会抛出KeyError。

您可以使用字符串格式执行此操作,如下所示:

num = 5
tag = 'input_%d' % num
因此,要组合所有输入_x标记的值列表,可以执行以下操作:

for x in total_inputs:
  list.append(input_x)
input_values = []
for i in range(1, number_of_values + 1):
  input_values.append(self.request.get('input_%d' % i))
这假设您知道要检索多少个值。您的问题假设您这样做,但如果您没有这样做,您可以迭代结果,直到您得到一个空字符串—对于不存在的标签,request.get的默认返回值


编辑:以上评论假设您正在使用webapp。如果您尝试调用一个不存在且未指定默认值的参数get,其他框架可能会抛出一个keyrerror。

您能澄清您的问题吗?我看到有人对Hyperboreus的答案投了反对票,但我也会像她/他那样理解你的问题?另外,从标题中可以看到未知变量名,但是self.request.args.get返回什么?你能给出一个困扰你的代码示例吗?@mac20kb?我认为你的链接由于堆栈溢出而被关闭了好几个数量级。从上下文来看,他问的问题对我来说似乎非常清楚。@Nick-所以不是一个usenet论坛!:至于清晰性,我很高兴你能理解,但在SO上发布的全部要点是要接触到广泛的受众,因此,如果他/她的问题对每个人来说都是清楚的,或者至少对尽可能多的人来说都是清楚的。@mac在App Engine上或关闭它时,任何使用类似webapp的框架的人都应该清楚,真的吗?他试图从表单帖子中获取按顺序编号的字段。我不知道他如何详细说明才能使这一点更清楚。你能澄清你的问题吗?我看到有人对Hyperboreus的答案投了反对票,但我也会像她/他那样理解你的问题?另外,从标题中可以看到未知变量名,但是self.request.args.get返回什么?你能给出一个困扰你的代码示例吗?@mac20kb?我认为你的链接由于堆栈溢出而被关闭了好几个数量级。从上下文来看,他问的问题对我来说似乎非常清楚。@Nick-所以不是一个usenet论坛!:至于清晰性,我很高兴你能理解,但在SO上发布的全部要点是要接触到广泛的受众,因此,如果他/她的问题对每个人来说都是清楚的,或者至少对尽可能多的人来说都是清楚的。@mac在App Engine上或关闭它时,任何使用类似webapp的框架的人都应该清楚,真的吗?他试图从表单帖子中获取按顺序编号的字段。我不确定他如何详细说明才能使这一点更清楚。OP说参数被标记为input_1、input_2等。您迭代了_值的范围数。“这会不会导致一个错一个错?”Hyperboreus是的,修正了。但是,为了一个篱笆柱错误而否决整个答案有点不礼貌。谢谢,事实上,我在头脑中把问题弄得更复杂了。您的解决方案当然是正确的——出于某种原因,我在脑海中决定self.request.form.get以某种方式在python中创建了一个新变量,而不是简单地通过字符串参数访问。愚蠢,因为我以前用过很多次这个函数!OP表示参数被标记为input_1、input_2等。您可以迭代_值的范围数。“这会不会导致一个错一个错?”Hyperboreus是的,修正了。投票给整个国家有点不礼貌
不过,我还是对一个篱笆柱的错误表示了歉意。谢谢,我实际上让这个问题在我的脑海里变得复杂多了。您的解决方案当然是正确的——出于某种原因,我在脑海中决定self.request.form.get以某种方式在python中创建了一个新变量,而不是简单地通过字符串参数访问。愚蠢,因为我以前用过很多次这个函数!抱歉,我刚刚意识到问题的名称是访问Python中的未知变量名;现在我明白了困惑的根源。我已经编辑了一个更合适的标题。对不起,我刚刚意识到问题的名称是访问Python中的未知变量名;现在我明白了困惑的根源。我已将标题编辑为更合适的标题。