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.routeroute.handleエントリの両方があり、どちらにも同じ値が含まれています。

from bottle import request

print request['bottle.route']

これは文書化されていません。私はそれをbottle.pyソースで見つけなければなりませんでした。値はRouteインスタンスです。一致したルートを判別するために検査できるa.nameと属性の両方があります。.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 に答える