2016-05-09 1 views
0

У меня есть два обработчика. В первом (FooHandler) я показываю форму в методе GET и получаю значение поля, метод POST. Получив это значение, я хочу передать его другому обработчику через URI. Затем BarHandler поймает его и может сделать запрос.Tornado - Получить переменную от URL

class FooHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.render("templates/fooForm.html") 


    def post(self): 
     var1 = self.get_argument('var1') #number 

     self.redirect('/query/{}'.format(var1)) 


class BarHandler(tornado.web.RequestHandler): 
    def get(self, var1): 
     q = Query.... 

def main(): 
    io_loop = tornado.ioloop.IOLoop.instance() 
    connect("test", host="localhost", port=27017, io_loop=io_loop) 

    app = tornado.web.Application(
    [ 
     (r"/", FooHandler), 
     (r"/query/\d+", BarHandler) 
     ], debug = True, 
    ) 
    app.listen(8888) 
    tornado.ioloop.IOLoop.current().start() 

if __name__ == "__main__": 
    main() 

Я получаю эту ошибку:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1443, in _execute 
    result = method(*self.path_args, **self.path_kwargs) 
TypeError: get() takes exactly 2 arguments (1 given) 

я не уверен, как передать var1 от FooHandler и поймать его в BarHandler. Любое предложение?

ответ

0

От documentation:

Any groups in the regex will be passed in to the handler’s get/post/etc methods as arguments.

Вам нужно будет использовать группу в своем регулярном выражении пути, если вы хотите пройти часть пути к обработчику.

Вы должны определить свой путь, как:

(r"/query/(\d+)", BarHandler)