【问题标题】:Regex in RedirectRoute not working correctlyRedirectRoute 中的正则表达式无法正常工作
【发布时间】:2013-06-16 11:52:31
【问题描述】:

我研究了如何使用 webapp2 在 RedirectRoute 中使用正则表达式。我已经尝试按照这里所说的方式对其进行格式化:http://webapp-improved.appspot.com/guide/routing.html#the-url-template,但我仍然无法让我的正则表达式工作。这是我所拥有的:

RedirectRoute('/book/<bookId:([0-9]+)><title:(.*)>',handlers.book,name='book')

对此的呼吁是:

self.redirect_to('book/%s_%s' %(bookId,title))

我期望的网址示例是:

book/5907332378656768_The-Wizzard-of-Oz

当我运行我的应用程序时,我收到以下错误:

错误:“名为 u'book/5907332378656768_The-Wizzard-of-Oz' 的路线未定义。

任何帮助将不胜感激。

EDIT:

大家好!感谢布伦特的回应,我能够解决这个问题。 我不得不改变self.redirect_to('book/%s_%s' %(bookId,title)) 到以下:self.redirect('book/%s_%s' %(bookId,title))

感谢大家的帮助!

【问题讨论】:

  • .* 将匹配任何重复零次或多次的单个字符(例如aaaa)。 . 表示任何单个字符。 * 表示重复前一项零次或多次。我怀疑这是您必须修改的部分,以创建与标题匹配的表达式。
  • @Brian - 呃,不完全正确。 .* 也匹配 abcd。也许这就是您的意思,但是您的示例具有误导性。 . 最好被认为是一个包含除换行符之外的所有字符的字符类。
  • 我不好,这不是问题所在。请原谅仓促的评论:(也许是关于逃避正斜杠的事情?\/
  • 感谢您的帖子。我尝试将第二个 / 移动到正则表达式中并转义它,但这也不起作用。第一个是正确的方式。感谢您的尝试!我将代码剥离为正则表达式并使用了 python 正则表达式检查器,它正确捕获了所有内容,所以我不知道发生了什么。

标签: regex google-app-engine python-2.7 webapp2


【解决方案1】:

我认为你可以把括号从模式中去掉:

RedirectRoute('/book/<bookId:[0-9]+><title:.*>',handlers.book,name='book')

【讨论】:

  • 感谢您的回复我删除了括号,它并没有解决我的问题,但我认为它使我的代码看起来更干净。
【解决方案2】:

Google 搜索 webapp2 error route "is not defined" 会找到 Webapp2 source code。该错误消息位于从redirect_to() 调用的方法default_builder() 中。该方法查找name 字段(在本例中为“book”)。也许您打算打电话给redirect()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多