Bottlepy提供动态root的静态文件

时间:2013-04-04 08:35:42

标签: python routes bottle

在bottlepy中提供静态文件就像这样简单:

@route('statics/<filepath:path>')
def server_static(filepath):
    return static_file(filepath, root='assets')

因此,提供的静态文件应位于assets目录中。

所以,这一个:http://127.0.0.1:8080/statics/jquery.js将引用assets/jquery.js

到目前为止,我没有发现任何问题。 但是,让我们说,我想用应用程序文件夹创建一个包含一些模型,视图和控制器的框架。 目录结构如下:

|---applications
|   |--- assets
|---start.py
|---core
    |--- __init__.py

core/__init__.py中,我设置了一个运行瓶子和路径资产目录的函数

from bottle import route, run, static_file

@route('assets/<filepath:path>')
def _serve_assets(path):
    # I want the root to be dynamic, because It is not always be applications
    return static_file(path, root=os.path.join('applications', 'assets'))

def framework_start(application_path = 'applications', **kwargs):
    # A lot of logic
    run(**kwargs)

start.py上,我这样做:

from core import framework_start
framework_start(application_path = 'applications')

到目前为止,静态文件按预期方式运行。但是我希望它仍然可以工作,即使我将start.py中的代码更改为:

framework_start(application_path = 'app')

和目录结构到这个

|---apps
|   |--- assets
|---start.py
|---core
    |--- __init__.py

那么,该怎么做?如何使用动态root进行静态路由?

1 个答案:

答案 0 :(得分:1)

return static_file(filename, root=filefolder)

第一个参数只是名称,第二个参数是包含它的文件夹。

您知道docs在哪里......

从你的评论我认为我明白了。

如果您希望模板具有路径,则需要通过<input type="hidden" name="arch"...之类的方式将其发送到瓶子并通过request.GET.get('arch', '')接收并与root=...一起使用。