0

私はトルネードを初めて使用します。この質問のために、この簡略化されたコードがあります。

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)

ページを使用するかレンダリングするかに応じて、「グローバル変数 'title' または 'error_message' が定義されていません」というself.render("login.html", error_message=error_message, title = title)エラーが発生するため、title 変数と同様に (一見不必要に) 繰り返されます。postget

私はページごとに異なるタイトルを持っています。get関数または post 関数が呼び出されたときに機能する1 つのtitle変数と 1 つself.render("login.html"...)のページ ハンドラー (つまり) を単純に持つ方法を知りたいと思っていました。LoginHandler逐語的な繰り返しは好きではありませんが、両方の関数で同じことをしないと、エラー メッセージを回避するのに苦労します。

どうすればこれを解決できますか? ありがとうございました。

4

1 に答える 1

1

titleおよびerror_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)

このようにすることの追加の利点は、1 つの場所で を変更するだけでよく、メソッドが であったかtitleであったかによって異なるタイトルを取得するリスクを冒さないことです。getpost

注: inerror_messageは必須ではないようです。単一のケースでのみ使用されています。呼び出しは同じパラメーターを受け取るわけではself.render()ないため、両方が必要です。

于 2013-02-14T07:32:43.000 に答える