2012-09-14 23 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'行,一切都奏效了。 –