2012-09-14 17 views
0

我刚刚开始学习Python,并且正在使用Pyramid作为我的Web框架。金字塔:add_static_view名称='目录/子目录'

我想在localhost/images/misc添加静态视图:

config.add_static_view('images', 'C:/Project/Images/') 
config.add_static_view('images/misc', 'C:/Path/To/Other/Images/') 

但我得到一个错误:File does not exist: C:/Project/images/misc

如此看来,第二行中添加images/misc为静态视图不有什么影响。

我一直在寻找一种方法来做到这一点,但我还没有找到任何东西。是否有可能添加一个静态视图,其中名称包含一个子目录?如果是这样,怎么样?

回答

4

引擎盖下,金字塔接通name部分add_static_view()方法进入形式name/*subpath(其中name可以包含斜线本身)的金字塔路线谓词。专用静态资产视图附加到该路由谓词。

在您的配置中,这意味着将会同时存在images/*subpathimages/misc/*subpath路由谓词,的顺序为。然后,当您请求路径为images/misc/foo.png的网址时,金字塔发现images/*subpath谓词第一个,并尝试查找'C:/Project/Images/'文件夹中的misc路径元素,该元素失败。

你很幸运,你可以扭转登记的顺序,只需注册images/misc路径优先:

config.add_static_view('images/misc', 'C:/Path/To/Other/Images/') 
config.add_static_view('images', 'C:/Project/Images/') 

现在images/misc/*subpath谓词先注册,和之前的其他谓词是将匹配任何images/misc/网址测试。

+0

感谢您的详细解释!我想我应该根据金字塔网址Dispatch文档中关于[路由排序]的部分来计算出它的结果(http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/urldispatch.html#route-declaration - 顺序) - 我只是没有考虑适用于add_static_view。现在正在工作。 –

+0

另一个注意事项 - 虽然这不是我问题的一部分,也许它会帮助别人试图解决这个问题:如果你有一个虚拟主机在httpd.conf中设置,httpd-vhosts.conf等,并且在那个虚拟主机里面有'Alias/images C:/ Project/Images',那么'add_static_view'行将不起作用。 Martijn的回答起初并不奏效,然后我想起我也成立了一个这样的虚拟主机。一旦我拿出别名行并交换了两个'add_static_view'行,一切都奏效了。 –