Подтвердить что ты не робот

Захват произвольного пути в маршруте Flask

У меня есть простой маршрут Flask, который я хочу захватить путь к файлу. Если я использую <path> в правиле, он работает для /get_dir/one, но не /get_dir/one/two. Как я могу захватить произвольный путь, так что path='/one/two/etc будет передан функции просмотра?

@app.route('/get_dir/<path>')
def get_dir(path):
    return path
4b9b3361

Ответ 1

Используйте конвертер path для захвата произвольных путей длины: <path:path> будет захватывать путь и передавать его аргументу path. Конвертер по умолчанию захватывает одну строку, но останавливается на косых чертах, поэтому ваш первый URL-адрес совпадает, а второй - нет.

Если вы также хотите сопоставить корневой каталог (ведущий слэш и пустой путь), вы можете добавить другое правило, которое устанавливает значение по умолчанию для аргумента пути.

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
    return path

Существуют и другие встроенные преобразователи, такие как int и float, а также можно писать свои собственные и для более сложных случаев.