当您使用self.redirect
时,它会发送一个标头,这会导致浏览器立即重定向到 /auth/login。这就是 HTTP 重定向的工作方式,与 Tornado 无关。
如果您希望页面保持可见,您可以使用元刷新来提供页面,并延迟代替self.write('Username empty')
:
<meta http-equiv="refresh" content="5;URL='http://example.com/auth/login'">
但元刷新也不是很理想——W3C 长期以来一直不鼓励使用它。在这种情况下,我会立即重定向并在登录页面上显示错误。例如:
self.redirect('/auth/login?error=%s' % tornado.escape.url_escape('Username empty'))
然后在登录页面上显示错误参数(如果已设置)。因此,在处理程序中:
...
error = self.get_argument('error', None)
if error is not None:
error = tornado.escape.url_unescape(error)
....
self.render('foo.html', error=error)
在模板中:
{% if error %}
{{ error }}
{% end %}