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/
后面的字符串,然后作为第二个参数传递给相应的请求方法get
或post
。
所以你必须像下面这样修改相应处理程序中存在的请求方法。
class WelcomeHandler(MainHandler):
def get(self, username):
self.render('welcome.html')
如果您想将 username
传递到 welcome.html
页面,则
def get(self, username):
self.render('welcome.html', username=username)
用户注册后,我想重定向到带有 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/
后面的字符串,然后作为第二个参数传递给相应的请求方法get
或post
。
所以你必须像下面这样修改相应处理程序中存在的请求方法。
class WelcomeHandler(MainHandler):
def get(self, username):
self.render('welcome.html')
如果您想将 username
传递到 welcome.html
页面,则
def get(self, username):
self.render('welcome.html', username=username)