2014-09-06 36 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