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

トレースバック (最新の呼び出しが最後):
File "C:\Python26\lib\site-packages\cherrypy_cprequest.py", line 606, in response cherrypy.response.body = self.handler() File "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 行目、 in test_callable_spec "parameters: %s" % ", ".join(extra_qs_params)) HTTPError: (404, '予期しないクエリ文字列パラメーター: var2')

CherryPy 3.1.2 を搭載

4

2 に答える 2

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

また

def index(self, **params):

「var2」は、params dict のキーになります。2 番目の例では、'var' も同様です。

*args 構文を参照する他の回答は、この場合は機能しないことに注意してください。CherryPy は、クエリ パラメータを位置引数ではなくキーワード引数として渡すためです。したがって、** 構文が必要です。

于 2010-01-03T03:00:23.910 に答える
1

完全に一般化するには、変更します

    def index(self, var = None):

    def index(self, *vars):

varsタプルにバインドされます。引数が渡されない場合は空で、1 つの引数が渡された場合は 1 つの項目があり、2 つ渡された場合は 2 つというようになります。もちろん、そのようなさまざまなケースを賢明かつ適切に処理するのはコード次第です。

于 2010-01-03T01:38:15.470 に答える