用户注册后,我想重定向到一个带有“../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个问题,但没有找到任何与我的问题相关的答案。请帮我修复此错误。
答案 0 :(得分:1)
这是因为您在路由正则表达式中使用了捕获组。
(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)