3

我在BottlePy中有以下钩子:

@bottle_app.hook('before_request')
def update_session():
    # do stuff
    return

还有一些路线:

@bottle_app.route('/')
def index():
    return render('index')

@bottle_app.route('/example')
def example():
    return render('example')

从内部update_session(),我如何确定正在调用哪条路线?

我浏览了文档无济于事,但这肯定是可能的吗?

4

2 回答 2

7

请求既有 abottle.route又有route.handle条目,两者都包含相同的值:

from bottle import request

print request['bottle.route']

这没有记录;我必须在bottle.py源代码中找到它。该值是一个Route实例;它同时具有 a.name和 a.rule属性,您可以检查以确定匹配的路由。

if request['bottle.route'].rule == '/':
    # matched the `/` route.

对于您的特定示例,这可能有点过头了,因为您只匹配简单的路径,但是对于具有正则表达式规则的更复杂的规则,这比尝试匹配request.path属性更好(但给您的路线一个好主意name价值)。

于 2013-01-24T11:04:56.877 回答
1
from bottle import request

@bottle_app.hook('before_request')
def update_session():
    print request.path
    return

应该做你要求的

然后,您可以将路线存储在字典中。

my_routes = {"/":lambda: 5}
event = my_routes.get(request.path, lambda: None)
print event()
于 2013-01-24T11:07:21.590 回答