2014-09-06 85 views
1

應用程序引擎(python)可以將多個靜態目錄指向單個url嗎?在我的app.yaml文件,我希望做一些事情,如:App.yaml - 服務多個靜態目錄的單個URL

未遂1:

- url: /media/ 
    static_dir: static/.* 

未遂2:

- url: /media/ 
    static_dir: static/dir1 

- url: /media/ 
    static_dir: static/dir2 

未遂3:

​​

使用任何符號(。*)都會導致這兩個目錄無法正常工作。嘗試2中的多重聲明僅導致第一個工作(dir1)和第二個(dir2)被忽略。當嘗試運行引擎並允許它在本地運行時,嘗試3會導致警告。

如何在不更改每個新靜態目錄的url的情況下執行此操作?

回答

1

假設你只是想一切都在「靜態」通過「/媒體」它應該只是罰款作爲:

- url: /media 
    static_dir: static 

編輯 - 在我寫這篇文章的時候,使用該確切配置這裏: https://imaginaryboy.appspot.com/media/dir1/text.txt

+0

我不喜歡這個解決辦法,因爲我的URL路徑將越來越向DIR1或DIR2文件夾之前一個額外的水平,但不是一個壞的建議......這太糟糕了,它是不可能的完全按照我的要求(根據德米特里薩多夫尼希的回答)。將此標記爲答案,因爲我將以此方式進行。感謝您花時間回覆。 – Robbie 2014-09-06 23:11:33

2

這是不可能的。但是,你可以把它與像/media-1/img.jpg,/media-2/bla.jpg等

- url: /media-(.*?)/(.*) 
    static_files: static/dir\1/\2 
    upload: static/(.*?)/(.*) 

更多的docs環節的工作。

我認爲唯一的出路是使用簡單的構建腳本,它將從/ static/dir1和/ static/dir2中的所有圖像複製到媒體中。您也可以使用此腳本進行一鍵式部署。事情是這樣的:

import os, glob 
source = ['static/dir-1', 'static/dir-2'] 
dest = 'media' 
for s in source: 
    for f in glob.glob(os.path.join(s, '*.*')): 
    shutil.copy(f, dest) 
+0

感謝您的回覆。這是一個很好的觀點,我很欣賞這個參考。我現在要實現'imaginaryboy的解決方案(由於簡單),但從長遠來看,我可能會做更多這樣的事情。謝謝! – Robbie 2014-09-06 23:12:57