2017-04-19 100 views
0

用户注册后,我想重定向到一个带有“../user/abcxyz”的欢迎页面,其中abcxyz是用户名。然而重定向网页上,我得到以下错误:WebApp2:TypeError:get()只需要1个参数(给出2个)

return method(*args, **kwargs) 
TypeError: get() takes exactly 1 argument (2 given) 

以下是代码的相关部分:

class Signup(MainHandler): 
    ... 
    ... 
    # after successful signup redirect to welcome page 
    self.redirect('/user/%s' % username) 

class WelcomeHandler(MainHandler): 
    def get(self): 
     self.render('welcome.html') 

def render_str(template, **params): 
    t = JINJA_ENVIRONMENT.get_template(template) 
    return t.render(params) 


class MainHandler(webapp2.RequestHandler): 
    """ Class for handelling account register, login, etc.""" 

    def write(self, *a, **kw): 
     self.response.out.write(*a, **kw) 

    def render_str(self, template, **params): 
     return render_str(template, **params) 

    def render(self, template, **kw): 
     self.write(self.render_str(template, **kw)) 

app = webapp2.WSGIApplication([ 
(r'/', HomeHandler), 
      (r'/user/(.*)', WelcomeHandler), 
      (r'/signup', Signup) 
     ], debug=True) 

我经历了很多similar之前问过的问题,但没有找到任何与我的问题相关的答案。请帮我解决这个错误。

回答

1

这是因为捕获组,你在路由正则表达式中使用。

(r'/user/(.*)', WelcomeHandler), 

这将捕获下面/user/,然后传递到相应的请求方法getpost作为第二个参数的字符串。

因此,您必须修改相应处理程序中存在的请求方法,如下所示。

class WelcomeHandler(MainHandler): 
    def get(self, username): 
     self.render('welcome.html') 
如果你想在 username传递给 welcome.html页面

,然后

def get(self, username): 
    self.render('welcome.html', username=username) 
+0

真棒,谢谢。 – ravi

+0

很高兴解决。 :-) –

相关问题