16

例如,假设我的cherrypy索引模块是这样设置的

>>> import cherrypy
>>> class test:
        def index(self, var = None):
            if var:
                print var
            else:
                print "nothing"
        index.exposed = True

>>> cherrypy.quickstart(test())

如果我发送多个 GET 参数,我会收到此错误

404 未找到

意外的查询字符串参数:var2

回溯(最近一次调用最后):
文件“C:\Python26\lib\site-packages\cherrypy_cprequest.py”,第 606 行,响应cherrypy.response.body = self.handler() 文件“C:\Python26\lib \site-packages\cherrypy_cpdispatch.py​​”,第 27 行,调用 test_callable_spec(self.callable, self.args, self.kwargs) 文件“C:\Python26\lib\site-packages\cherrypy_cpdispatch.py​​”,第 130 行,在 test_callable_spec "参数: %s" % ", ".join(extra_qs_params)) HTTPError: (404, 'Unexpected query string parameters: var2')

由 CherryPy 3.1.2 提供支持

4

2 回答 2

36
def index(self, var=None, **params):

或者

def index(self, **params):

'var2' 将是 params 字典中的一个键。在第二个例子中,'var' 也是如此。

请注意,在这种情况下,引用 *args 语法的其他答案将不起作用,因为 CherryPy 将查询参数作为关键字参数而不是位置参数传递。因此,您需要 ** 语法。

于 2010-01-03T03:00:23.910 回答
1

为了完整的一般性,更改

    def index(self, var = None):

    def index(self, *vars):

vars将绑定到一个元组,如果没有传递参数,则该元组为空;如果传递了一个参数,则具有一项,如果传递了两个,则具有两项,依此类推。当然,然后由您的代码来明智和适当地处理各种此类情况。

于 2010-01-03T01:38:15.470 回答