Pyramid 的 add_static_view 是如何工作的?

Ato*_*ton 5 python web-applications pyramid

Pyramid 中的 add_static_view(name, path) 如何工作?

从文档字符串:

name参数是一个字符串,表示与应用程序相关的本地 URL 前缀。它也可以是完整的 URL。path参数是静态文件所在磁盘上的路径。这可以是绝对路径、包相关路径或资产规范。”

不知何故,我觉得这个描述不是很准确。

如果我添加一些代码

config.add_static_view("static", "/path/to/resource/on/filesystem")
Run Code Online (Sandbox Code Playgroud)

我访问

http://localhost:PORT/static/logo.png  
Run Code Online (Sandbox Code Playgroud)

我看到了 logo.png,因为它可以在

/path/to/resource/on/filesystem/
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一些像下面这样的代码

config.add_static_view("http://myfilehoster.com/images", "myproject:images")
Run Code Online (Sandbox Code Playgroud)

path参数是静态文件所在磁盘上的路径”的描述似乎不再准确,因为实际文件驻留在 myfilehoster 的磁盘上。在我看来,我只是注册了某种标识符 (myproject:images),我可以在我的程序代码中使用它来引用“真实”位置“http://myfilehoster.com/images”。例如

request.static_url("myproject:images/logo.png") 
Run Code Online (Sandbox Code Playgroud)

将被解析为“http://myfilehoster.com/images/logo.png”。

那么这里的文档不准确还是我遗漏了什么?

Mar*_*ers 5

你错过了一些东西。在关于静态资产叙述性文档中,它指出:

相反,代表URL前缀,则name调用的参数add_static_view()可以交替是一个URL。到目前为止,我们看到的每个示例都显示了将name参数用作 URL 前缀的用法。但是,当nameURL 时,可以从外部网络服务器提供静态资产。在此模式下,name使用 生成 URL 时将 用作 URL 前缀pyramid.request.Request.static_url()

API 文档中使用了类似的措辞:

add_static_view使用name表示 URL 前缀的参数调用时,如上所示,后续调用以传递给pyramid.request.Request.static_url()path参数开头的路径add_static_view将生成类似 的 URL http://<Pyramid app URL>/images/logo.png,这将导致包logo.png的 images 子目录中的文件mypackage为送达。

使用 URL 可以add_static_view完全切换行为,并且path参数被解释为仅用于.static_url()方法的符号路径。后一个细节可能没有在文档中明确描述,如果您对此有强烈的感觉,可以在金字塔问题跟踪器中提交问题。