6

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

从文档字符串:

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

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

如果我添加一些代码

config.add_static_view("static", "/path/to/resource/on/filesystem")

我访问

http://localhost:PORT/static/logo.png  

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

/path/to/resource/on/filesystem/

现在,如果我有如下代码

config.add_static_view("http://myfilehoster.com/images", "myproject:images")

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

request.static_url("myproject:images/logo.png") 

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

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

4

1 回答 1

7

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

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

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

当使用表示 URL 前缀add_static_viewname参数调用时,如上所示,后续调用以传递给pyramid.request.Request.static_url()的参数开头的路径将生成类似于 的 URL ,这将导致包的 images 子目录中的文件为服务。pathadd_static_viewhttp://<Pyramid app URL>/images/logo.pnglogo.pngmypackage

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

于 2012-07-27T14:58:39.947 回答