0

次のアプリケーション構成があります。

settings = {
    'default_handler_class': BaseHandler
}

app = web.Application([
        (r'/', IndexHandler),
        (r'/ws', SocketHandler),
        (r'/js/(.*)', web.StaticFileHandler, {'path': 'assets/js', 'default_filename': 'templates/error.html'}),
        (r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'}),
        (r'/images/(.*)', web.StaticFileHandler, {'path': 'assets/images'})
    ], **settings)

ファイルを入力http://localhost:8888/js/d3.min.jsすると提供されますが、ファイル名のスペルを間違えて提供するhttp://localhost:8888/js/d3.mi.jsと、たとえば、にあるデフォルトのエラーページを取得したいと思いますtemplates/error.html。URL のhttp://localhost:8888/not/existing場合は問題なく動作しますが、http://localhost:8888/js/d3.mi.js単純に表示され404: Not Foundます。

ドキュメントで次の部分を見つけました:

ディレクトリが要求されたときに index.html のようなファイルを自動的に提供するには、アプリケーション設定で static_handler_args=dict(default_filename="index.html") を設定するか、staticFileHandler の初期化引数として default_filename を追加します。

ただし、言及されたコードをどこで指定する必要があるのか​​ わかりません。私の'default_filename': 'templates/error.html'コードでは動作しません。

4

2 に答える 2

1

default_filename

で指定されたファイルは、指定されdefault_filenameた静的パスにある必要があります。したがって、ディレクトリに移動error.htmlすると、そこに移動すると、error.html の内容が表示されます。assets/js/js/

基本的に、この機能は、ユースケースが制限されたヘルパーです (imho)。詳しくはhttps://stackoverflow.com/a/27891339/681044をご覧ください。

カスタム エラー ページ

すべてのリクエストハンドラーは、関数内のエラーを処理/レンダリングしwrite_errorます。これは、カスタム エラー ページを作成するための推奨される方法です。

class MyStaticFileHandler(tornado.web.StaticFileHandler):

    def write_error(self, status_code, *args, **kwargs):
        # custom 404 page
        if status_code in [404]:
            self.render('templates/error.html')
        else:
            super().write_error(status_code, *args, **kwargs)
于 2016-03-21T09:50:14.547 に答える
1

実際、「default_filename」はコードでうまく機能します。

default_filename とはどういう意味ですか?

「default_filename」は、「http://localhost:1234/js/」などのディレクトリをリクエストすると、サーバーがデフォルトのファイルを返すことを意味します。そのため、「デフォルト ファイル」はエラー ファイルではなく、「デフォルト ファイル名」は必要なものではないことに注意する必要があります。

あなたは何が必要ですか?

「StaticFileHandler」のサブクラスを書くと解決します。「StaticFileHandler」の「validate_absolute_path」メソッド内

   if not os.path.exists(absolute_path):
        raise HTTPError(404)

404 を発生させず、エラー ファイル パス (js/error.js など) を返します。幸運を!

私の英語は下手です、あなたがそれを理解できるかどうかわかりません ^_^. あなたと経験を交換できることを嬉しく思います。

于 2016-03-21T01:56:46.523 に答える