2013-02-14 80 views
0

我是新來的龍捲風,而我對這個問題的目的,這種簡化代碼:龍捲風/ Python - 我如何避免這種重複?

class LoginHandler(BaseHandler): 
    def get(self): 
     error_message = None 
     title = "Log in to your account" 

     self.render("login.html", error_message=error_message, title=title) 

    def post(self): 
     #function and params excluded for brevity of question 
     error_message = self.authenticate_user() 
     title = "Log in to your account" 

     self.render("login.html", error_message=error_message, title=title) 

self.render("login.html", error_message=error_message, title = title)以及標題變量重複(看似不必要的),否則,我得到的錯誤「根據我使用post還是get來渲染頁面,全局變量'title'或'error_message'未定義。

我爲每個頁面不同的標題,我想知道我怎麼可以簡單地有一個title變量和一個self.render("login.html"...)每頁處理器(即LoginHandler),將工作時,無論是獲取或交的函數被調用。我不喜歡逐字重複,但是當我在兩個函數中都沒有做同樣的事情時,我很難避免錯誤消息。

我該如何解決這個問題?謝謝。

回答

1

您可以通過啓動它們作爲類成員來避免重新聲明titleerror_message變量。 (我在變量名中使用的領先的下劃線_,以表明該值應該是私有的,並且只在這個類中使用。)

class LoginHandler(BaseHandler): 
    def __init__(self): 
     # Call the BaseHandler's __init__ function to initialize parent's members 
     BaseHandler.__init__() 
     self._title = "Log in to your account" 

    def get(self): 
     self.render("login.html", error_message=None, title=self._title) 

    def post(self): 
     self.render("login.html", error_message=self.authenticate_user(), title=self._title) 

做這種方式的附加好處是,你只需要在一個地方更改title,並且您不會冒着獲取不同標題的風險,具體取決於方法是get還是post

注意:看起來在error_message是沒有必要的 - 它只被用在一個案例中。 self.render()調用不會收到相同的參數,因此都是必需的。

+0

這很好,謝謝!很高興我沒有做太多的事情。 – JohnZ 2013-02-14 17:39:18