【发布时间】:2013-01-21 23:40:33
【问题描述】:
不幸的是,我发现自己需要修改现有的 Pylons 应用程序来处理提供具有相同名称的多个参数的 URL。类似于以下内容... 域:端口/动作?c=1&v=3&c=4
通常以这种方式访问参数...
from pylons import request
c = request.params.get("c")
#or
c = request.params["c"]
这将在任何一种情况下返回“4”作为值,因为在这些情况下忽略除最后一个值之外的所有值似乎是标准行为。我真正需要的是能够同时访问两者。我尝试打印出 request.params 并得到类似的东西......
NestedMultiDict([(u'c', u'1'),(u'v', u'3'),(u'c', u'4')])
我还没有找到一种方法来索引它,或者访问 c 的第一个值。
我找到了一个与此问题相关的similar question,但用 PHP 解决了:
这些方面的东西对我来说很有效,但也许一些 Python 代码适合 Pylons。有没有人处理过类似的事情?
【问题讨论】:
-
感谢您修复格式!结果显然不是我的意图......
-
如果我错了,请纠正我,但同一请求中不能存在多个 KEY 对象?这违反了所有定义..
-
你是说不应该有两个同名的参数?如果这是您的问题,我同意最佳做法会避免它。但这并不是严格禁止的。例如,尝试在浏览器中输入此 URL (google.com/search?q=one&q=two)。有两个查询参数,因此 Google 将它们合二为一。这或多或少是我希望能够做到的。
-
或者你可能是说字典不应该包含两个不同条目的“c”键?我不认为他们可以,但是我又不是很熟悉“NestedMultiDict”。在发布此内容时,我试图弄清楚它们是如何工作的。
-
我在问/说明最好的做法是理解 URL 在某种意义上是一个平面字典,并且根据它声明的 HTTP1.1 的 RFC(这是我想要的部分如果我错了,请更正)KEY 对象就是那个,键.. 如果需要,该键的值应该包含多个选项,但不是做 q=one&q=two 它应该是 q=[1 ,2,3,4] 可以说。但同样,我可能错了,我只是想学一两件事,而不用我愚蠢的答案来回答你的问题:)
标签: python url parameters pylons