BottlePy - 如何在钩子中找到当前路由?
我在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()
这个函数里,我怎么知道当前调用的是哪个路由呢?
我查阅了文档,但没有找到答案,这个应该是可以做到的吧?
2 个回答
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()
应该可以满足你所要求的。
然后你可以把路径存储在一个字典里。
7
这个请求同时有一个 bottle.route
和一个 route.handle
的条目,它们的值是一样的:
from bottle import request
print request['bottle.route']
这个情况没有文档说明;我得去 查看 bottle.py
的源代码 才发现。这个值是一个 Route
实例;它有 .name
和 .rule
这两个属性,你可以查看这两个属性来确定哪个路由被匹配上了。
if request['bottle.route'].rule == '/':
# matched the `/` route.
对于你具体的例子来说,这可能有点过于复杂,因为你只是匹配简单的路径,但如果是更复杂的规则,比如使用正则表达式的规则,这种方法会比直接匹配 request.path
属性要好(不过给你的路由设置一个 name
值是个好主意)。