2016-08-01 33 views
0

從表單URL:/foo/(.*)/bar/(.*),我想提供文件,其中從2個捕獲的組計算實際路徑。我的問題是,StaticFileHandler的get()只需要1個路徑參數。有沒有辦法讓這個工作,而不必重新實現StaticFileHandler的大部分方法?多個正則表達式捕獲組的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