我正在尝试使用带有大量供应商插件的bootstrap主题网站,并将bottle.py用于内置了一些API服务的Web服务器。
我想知道,如果对于静态路由,无论如何都要调用路由请求中的所有子目录?我想做这样的事情(而不是为每个子目录创建一个单独的路由路径)
@route('/vendors/*/<filename>')
def vendors__static(filename):
return static_file(filename, root='./vendors/*/')
这一切都可能吗?是否涉及查找时间成本?谢谢!
答案 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
向客户端返回一个文件的内容。您需要考虑如何将多个文件“返回”到客户端。也许你可以连接他们的内容(如上面的例子)?无论如何,这是一个单独的问题,从瓶子路由,所以我会留在那。