使用方法:瓶装路线中的冒号字符

时间:2017-06-05 21:42:56

标签: bottle

我有简单的Bottle路线,URL应包含:(冒号)符号。网址应与/REST/item:128/REST/item:89753

相同

我的路线是

@route('/REST/item:<id:int>')
def icc(id):
    return { 'id': id }

路线无法正常工作。 id仅包含来自url id的最后一个char,而不是完整id。

如何在路线中使用:(冒号)?

1 个答案:

答案 0 :(得分:2)

哇,这令人困惑。

我没有时间完全理解正在发生的事情,但我怀疑当路线上有冒号时,Bottle的路线正则表达式之一正在吃太多字符。

无论如何,使用反斜杠转义冒号似乎可以解决问题:

@route(r'/REST/item\:<id_:int>')  # note the "r" prefix there
def icc(id_):
    return {'id': id_}

这是一个测试请求及其响应:

=> curl -v 'http://127.0.0.1:8080/REST/item:123'
{"id": 123}

编辑:神秘solved

  

Bottle目前支持url通配符的两种语法:   一个(自0.10开始)和:旧语法。两者都在这里描述:   http://bottlepy.org/docs/dev/routing.html

     

在您的示例中,:触发了旧语法。解决方案是   用反斜杠逃避冒号(如SO答案中所述)。   转义完全实现并按预期工作,但是   无证。这就是我将此问题保持开放的原因。拉请求   更好的文件将受到欢迎。