2011-12-20 170 views
0

我正在尝试使用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。

对我在做什么有什么建议吗?感谢你的帮助!

+0

你的app.yaml文件的其余部分有什么(我假设python27,因为如果不是整个事情都行不通)?你有没有尝试在'SITE_URL_PATTERNS'的'PathPrefixRoute'之前放置'Route('r/view/action_one'...')? – bossylobster 2011-12-21 02:37:03

+0

感谢您在这里帮助我!其余的app.yaml有标准的东西,包括python27参考。我尝试在'PathPrefixRoute'之前甚至在外面移动Route('r/view/action_one'...'(通过在列表中有两个列表并执行+ =),但它们都不起作用。困惑为什么这不起作用。 – reallife 2011-12-21 08:29:45

回答

1

好吧,我发现我的愚蠢的错误(是的,一个真正的“卫生署!”的时刻):

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

应该

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

它有匹配数据存储密钥,因为这些可以包括问题\ w表示的其他字符。去除其他/通常会解决这个问题(使用[^ /] +)。

希望这会帮助别人。