webapp2 路由返回 404

0 投票
1 回答
675 浏览
提问于 2025-04-17 08:43

我正在尝试使用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 个回答

1

好的,我发现了我自己的愚蠢错误(没错,真的是个“哎呀!”的时刻):

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

应该是

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

它在匹配数据存储的键时遇到了问题,因为这些键可能包含其他字符,而这些字符用 \w 表示。通常,选择除了 / 以外的所有字符(用 [^/]+)就能解决这个问题。

希望这也能帮助到其他人。

撰写回答