bottle.py URL 路由与反向怎么用?

1 投票
2 回答
2213 浏览
提问于 2025-04-17 17:25

下面是一个Bottle.py的示例代码:

@route('/show_<name>')
def show(name):
   return ''

我有两个问题:

  1. 给定一个网址,我们怎么找到对应的处理函数?比如说,网址是 /show_magic,我想知道哪个 show() 函数负责处理这个网址的请求。

  2. 给定一个路由(不是Router哦!)和一些参数,怎么得到网址?比如,我需要一个叫做 reverse 的函数,能够让 reverse(default_app().routes[0], name='me') == '/show_me'

2 个回答

6

你可能想考虑使用命名路由。

@route('/show_<item_name>', name='item_show')
def show(item_name):
   return ''

现在,给定路由名称和参数,怎么获取URL呢?我们使用get_url。

get_url('item_show', item_name='my_item')

http://nongraphical.com/2012/08/using-bottle-py-in-production/

3

对于你的第一个问题,可以使用 Bottle.match。给定一个 path(比如 '/show_magic')和一个 method(比如 GETPOST),下面的代码会返回一个包含 Route 对象及其参数的元组:

default_app().match({'PATH_INFO': path, 'REQUEST_METHOD': method})

这里调用的是 Route 对象的 callbackcall 属性。

对于你的第二个问题,可以使用路由器的 build 方法,结合路由的 rule 和一些参数(kwargs):

default_app().router.build(route.rule, name='me')

这个方法似乎没有文档说明,但它是可以用的。

撰写回答