0

我是 Tornado 的新手,我有这个简化的代码来解决这个问题:

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 变量被重复(似乎不必要) ,self.render("login.html", error_message=error_message, title = title)因为否则,我会收到错误“全局变量'title'或'error_message'未定义”,具体取决于我是使用post还是get呈现页面。

我对每一页都有不同的标题,我想知道如何简单地让一个title变量和一个self.render("login.html"...)每页处理程序(即LoginHandler)在调用 get 或 post 函数时起作用。我不喜欢逐字重复,但是当我在两个函数中不做同样的事情时,我很难避免错误消息。

我该如何解决这个问题?谢谢你。

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)

这样做的额外好处是您只需要title在一个地方更改,并且您不会冒着获得不同标题的风险,具体取决于方法是get还是post.

注意:似乎 inerror_message不是必需的 - 它仅在单个案例中使用。self.render()调用不接收相同的参数,因此都是必需的。

于 2013-02-14T07:32:43.000 回答