在Bottle.py Web框架的静态路由中包含子目录

时间:2014-02-02 06:37:56

标签: python rest twitter-bootstrap static-linking bottle

我正在尝试使用带有大量供应商插件的bootstrap主题网站,并将bottle.py用于内置了一些API服务的Web服务器。

我想知道,如果对于静态路由,无论如何都要调用路由请求中的所有子目录?我想做这样的事情(而不是为每个子目录创建一个单独的路由路径)

 @route('/vendors/*/<filename>')
 def vendors__static(filename):
     return static_file(filename, root='./vendors/*/')

这一切都可能吗?是否涉及查找时间成本?谢谢!

1 个答案:

答案 0 :(得分:0)

是的,Bottle确实支持对URI路径进行全局操作;见the :path filter。以下是基于原始代码的完整示例:

from bottle import Bottle, route, static_file, response

app = Bottle()

@app.route('/vendors/<vendor_path:path>/<filename>')
def vendors__static(vendor_path, filename):
    vendors = vendor_path.split('/')
    responses = []
    for vendor in vendors:
        # you read the file here and insert its contents
        responses.append('<contents of ./vendors/{}/{} go here>'.format(vendor, filename))
    response.content_type = 'text/plain'
    return '\n'.join(responses)

app.run(host='127.0.0.1', port=8080)

然后,对http://127.0.0.1:8080/vendors/v1/v2/v3/myfile的调用产生:

<contents of ./vendors/v1/myfile go here>
<contents of ./vendors/v2/myfile go here>
<contents of ./vendors/v3/myfile go here>

暂且不说:static_file向客户端返回一个文件的内容。您需要考虑如何将多个文件“返回”到客户端。也许你可以连接他们的内容(如上面的例子)?无论如何,这是一个单独的问题,从瓶子路由,所以我会留在那。