WebApp2: TypeError: get() takes exactly 1 argument (2 given)

WebApp2: TypeError: get() takes exactly 1 argument (2 given)

用户注册后,我想重定向到带有 url“../user/abcxyz”的欢迎页面,其中 abcxyz 是用户名。但是在重定向页面上出现以下错误:

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)

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

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

(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)