2010-01-03 2 views
13

, например, сказать, что я мой CherryPy модуль индекс создан как этотКак заставить cherrypy принять переменное число параметров GET?

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

>>> cherrypy.quickstart(test()) 

Если я посылаю более одного параметра GET я получаю эту ошибку

404 Not Found

Unexpected query string parameters: var2

Traceback (most recent call last):
File "C:\Python26\lib\site-packages\cherrypy_cprequest.py", line 606, in respond cherrypy.response.body = self.handler() File "C:\Python26\lib\site-packages\cherrypy_cpdispatch.py", line 27, in call test_callable_spec(self.callable, self.args, self.kwargs) File "C:\Python26\lib\site-packages\cherrypy_cpdispatch.py", line 130, in test_callable_spec "parameters: %s" % ", ".join(extra_qs_params)) HTTPError: (404, 'Unexpected query string parameters: var2')

Powered by CherryPy 3.1.2

+2

Пожалуйста, не принимайте мой ответ и принимайте правильный ответ от Coady, чтобы я мог удалить мою. –

ответ

1

Для полной общности, изменить

def index(self, var = None): 

в

def index(self, *vars): 

vars будет привязан к кортежу, который пуст, если аргументы не переданы, имеет один элемент, если передан один аргумент, два, если два, и так далее. Это зависит от вашего кода, чтобы справляться с различными такими случаями разумно и надлежащим образом, конечно.

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

или

def index(self, **params): 

'var2' будет ключевым в PARAMS ДИКТ. Во втором примере так же будет «var».

Обратите внимание на другие ответы, ссылки на которые синтаксис * args не будут работать в этом случае, потому что CherryPy передает параметры запроса как аргументы ключевого слова, а не позиционные аргументы. Следовательно, вам нужен синтаксис **.

Смежные вопросы