2016-08-01 9 views
0

URL形式の/foo/(.*)/bar/(.*)から、実際のパスがキャプチャされた2つのグループから計算されるファイルを提供します。私の問題は、StaticFileHandlerのget()は1つのpathパラメータしか取らないということです。 StaticFileHandlerのメソッドのほとんどを再実装することなく、これを動作させる方法はありますか?複数のregexキャプチャグループのTornado StaticFileHandlerパス

私の現在の回避策はすべてをキャプチャすることです:(/foo/.*/bar/.*)、しかし、私はオーバーライドされたget_absolute_path()の中で同様の正規表現を再解析する必要があります。

答えて

1

StaticFileHandlerを拡張せずにこれを行う方法はありません。それは小さな変更になります:

from tornado import gen, web 

class CustomStaticFileHandler(web.StaticFileHandler): 

    def get(self, part1, part2, include_body=True): 
     # mangle path 
     path = "dome_{}_combined_path_{}".format(part1, part2) 
     # back to staticfilehandler 
     return super().get(path, include_body) 

    # if you need to use coroutines on mangle use 
    # 
    # @gen.coroutine 
    # def get(self, part1, part2, include_body=True): 
    #  path = yield some_db.get_path(part1, part2) 
    #  yield super().get(path, include_body) 

app = web.Application([ 
    (r"/foo/(.*)/bar/(.*)", CustomStaticFileHandler, {"path": "/tmp"}), 
]) 
+0

ありがとう、これは動作します。 validate_absolute_pathをオーバーライドするか、ハンドラ宣言で与えた "パス"が生成するすべてのパスの親ディレクトリであることを確認する必要があります。 – Gnurfos

関連する問題