【问题标题】:Bottlepy serve static file with dynamic rootBottlepy 提供具有动态根目录的静态文件
【发布时间】:2013-04-04 22:14:10
【问题描述】:

在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

那么,该怎么做呢?如何用动态根做静态路由?

【问题讨论】:

    标签: python routes bottle


    【解决方案1】:
    return static_file(filename, root=filefolder)
    

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

    你知道docs 在哪里...

    从你的 cmets 我想我明白了。

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

    【讨论】:

    • 嗨,我绝对知道文档在哪里。谢谢你再次指出。我的问题是如何使第二个参数动态化?至于模板,我们有 TEMPLATE_PATH 可以动态设置(更改或运行时)。我想为 static_file 这样做
    • 这个想法是使用 var 而不是 root 的常量值。我使用类似static_file(filename, root='./{}'.format(arch[-1]))
    • 对不起,我不太清楚。但这是否意味着我应该在我的 html 中使用它:
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2017-08-31
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多