2010-01-03 7 views
13

na przykład powiedzieć, że mój moduł indeksu CherryPy skonfigurować jak tenJak zmusić cherrypy do zaakceptowania zmiennej liczby parametrów GET?

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

>>> cherrypy.quickstart(test()) 

Jeśli mogę wysłać więcej niż jeden parametr GET otrzymuję ten błąd

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

Proszę, nie akceptuj mojej odpowiedzi i zaakceptuj poprawną odpowiedź od Coady, aby móc usunąć moje. –

Odpowiedz

1

Dla pełnej ogólności, zmień

def index(self, var = None): 

do

def index(self, *vars): 

vars będzie związany z krotką, która jest pusta, jeśli nie przekazano żadnych argumentów, ma jedną pozycję, jeśli jeden argument został przekazany, dwa, jeśli dwa, i tak dalej. To zależy od twojego kodu, aby poradzić sobie z różnymi takimi przypadkami w sposób rozsądny i odpowiedni, oczywiście.

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

lub

def index(self, **params): 

'var2' będzie kluczowym w params dict. W drugim przykładzie, tak samo będzie "var".

Zauważ, że inne odpowiedzi odnoszące się do składni * args nie będą działać w tym przypadku, ponieważ CherryPy przekazuje parametry zapytania jako argumenty słów kluczowych, a nie argumenty pozycyjne. Dlatego potrzebna jest ** składnia.