WebApp2:TypeError:get()只取1个参数(给定2个)

时间:2017-04-19 03:14:28

标签: python-2.7 google-app-engine jinja2 webapp2

用户注册后,我想重定向到一个带有“../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)

我之前询问了很多similar个问题,但没有找到任何与我的问题相关的答案。请帮我修复此错误。

1 个答案:

答案 0 :(得分: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)