Маршрутизация webapp2 возвращает 404

Я пытаюсь использовать маршрутизацию webapp2, и это в настоящее время не удается. Кажется, он не соответствует правилам маршрутизации, которые я установил, и в результате возвращает 404 для определенных правил.

Мой код похож на:

main.py

    import webapp2, urls

    app = webapp2.WSGIApplication(urls.SITE_URL_PATTERNS, debug=True)

urls.py

    from webapp2 import Route
    from webapp2_extras import routes

    import test_handler


    SITE_URL_PATTERNS = [
            routes.PathPrefixRoute('/admin', [
                    Route(r'/action_one', test_handler.take_action_one),
                    Route(r'/action_two', test_handler.take_action_two),
                    Route(r'/<action_three:\w+>', test_handler.take_action_three),
            ]),
            Route(r'/view/action_one', test_handler.view_action_one),
            Route(r'/', test_handler.view_homepage),
    ]

app.yaml

    - url: .*
        script: main.app

Я не могу загрузить /view/action_one (возвращает 404), но я могу загрузить /admin/action_one.

Любые предложения о том, что я делаю не так здесь? Ценю твою помощь!

1 ответ

Хорошо, я нашел свою глупую ошибку (да, настоящий момент "DOH!"):

Route(r'/<action_three:\w+>'

Должно быть

Route(r'/<action_three:[^/]+>'

У него возникли проблемы с соответствием ключей хранилища данных, поскольку они могут включать другие символы, представленные \w. Переходя ко всему остальному, но /, как правило, решит эту проблему (используйте [^/]+).

Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам