我是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)
重复self.render("login.html", error_message=error_message, title = title)
以及标题变量(看似不必要),否则,我得到错误“全局变量'标题'或'error_message'未定义”,这取决于我是否使用{{1或post
呈现页面。
我对每个页面都有不同的标题,我想知道如何只使用一个get
变量和一个title
每页处理程序(即self.render("login.html"...)
)当调用get或post函数时。我不喜欢逐字重复,但是当我在两个函数中都没有做同样的事情时,我无法避免错误消息。
我该如何解决这个问题?谢谢。
答案 0 :(得分: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
,并且根据方法是否为{{1},您不会冒险获得不同的标题}或get
。
注意:似乎post
中没有必要 - 它仅用于单个案例。 error_message
调用不会收到相同的参数,因此都是必需的。