2017-04-19 91 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

很高興解決。 :-) –

相關問題