を使用する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 %}