2016-08-01 2 views
0

Из URL-адреса формы: /foo/(.*)/bar/(.*), я хочу обслуживать файлы, где фактический путь вычисляется из 2 захваченных групп. Моя проблема в том, что метод get() StaticFileHandler принимает только один параметр пути. Есть ли способ заставить это работать, не переустраивая большинство методов StaticFileHandler?Tornado StaticFileHandler путь для нескольких групп захвата regex

Мое текущее обходное решение состоит в том, чтобы захватить все: (/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