Google App Engine:如何拥有静态&同一个父dir的dyamic文件?例如dir / css& DIR / Python的?

时间:2017-12-30 19:17:31

标签: python google-app-engine templates directory yaml

因此,对于一个项目,我需要将代码分为3个父文件夹--SourceA,SourceB和SourceC,具体取决于代码是我自己的,部分是我自己的,还是其他人的代码。这三个文件夹也有一个python,javascript和misc(包含HTML和其他任何东西)。例如,结构可以用图形表示如下:

- SourceA

----蟒

---- JavaScript的

----杂项

- SourceB

----蟒

---- JavaScript的

----杂项

- SourceC

----蟒

---- JavaScript的

----杂项

同样,我的app.yaml文件可以在下面看到。在本地运行,这非常有效,相应地显示静态和动态文件,但是,当部署在Google App Engine上时,只会抛出TemplateNotFound错误,可能是因为app引擎将父目录(例如SourceA)视为静态路径:

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /SourceA/misc
  static_dir: SourceA/misc
- url: /SourceB/misc
  static_dir: SourceB/misc
- url: /SourceC/misc
  static_dir: SourceC/misc
- url: /SourceA/javascript
  static_dir: SourceA/javascript
- url: /SourceB/javascript
  static_dir: SourceB/javascript
- url: /SourceC/javascript
  static_dir: SourceC/javascript
- url: /.*
  script: SourceA.python.main.app

如果我运行它,我得到Flask中的render_template()函数抛出的TemplateNotFound错误(在幕后使用Jinja)以及当我尝试使用Jinja中的.render()函数时。如果我删除所有静态处理程序只是为了测试原理,python代码再次按预期工作...但当然静态文件没有服务...即。通过将我的app.yaml更改为

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
  script: SourceA.python.main.app

虽然我可以通过简单地在SourceA / B / C目录之外创建一个静态目录来解决这个问题并在appspot上拥有一个完全正常工作的站点,但这并不理想,因为它并不是很好。 ; t遵守我应该遵循的规范

无论如何,希望我已经解释了这个问题,如果有人知道这是否可能,那么我会感激任何帮助!

由于

1 个答案:

答案 0 :(得分:0)

如果您的应用程序在开发服务器上正常运行,则意味着问题只是声明为static的目录中的文件存在,默认情况下该应用程序无法访问。将application_readable标志添加到静态目录的处理程序配置将解决该问题,请参阅handlers表中的相应行。

但一般来说,将应用程序代码与静态项目混合起来并不是一个好主意。