try:
username = self.get_argument('username')
except:
self.write('Username empty')
time.sleep(1)
self.redirect('/auth/login')
我希望Username empty
在一秒钟内可见,然后重定向。但在重定向之前,页面上似乎没有任何内容。我知道这是因为在连接关闭之前不会向客户端显示任何内容。那么无论如何要显示一秒钟的书面内容?
答案 0 :(得分:3)
当您使用self.redirect
时,会发送一个标头,这会导致浏览器立即重定向到/ auth / login。这是HTTP重定向的工作方式,与Tornado无关。
如果您希望页面保持可见状态,则可以使用meta refresh提供一个页面,并延迟代替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 %}