0

更新:我发现了问题。我的 HTML 文件静态规则仍然与模板匹配,即使它们位于子目录中。在更改规则使其不再匹配后,应用程序可以访问这些文件。

我正在创建一个 Google AppEngine 应用程序。我正在使用 Go 语言,但我不确定这是否相关。我想使用带有单独模板文件的模板。所以应用程序必须读取模板文件。在本地这可行,但在将应用程序上传到 GAE 后,调用 template.ParseFiles() 时我得到“没有这样的文件或目录”。

所以我在想,我必须以某种方式指出模板文件是应用程序文件,以便它们以正确的方式上传。我想我的模板文件可能因为这个在我的 app.yaml 中被上传为静态文件

- url: /(.*\.html)
  static_files: \1
  upload: .*\.html

所以我把它们移到了他们自己的目录中。但这并没有什么不同。我尝试在 app.yaml 中为我的脚本规则添加一个上传指令,如下所示:

- url: /.*
  script: _go_app
  upload: templates/.*

但这似乎是不允许的。那么谁能告诉我如何从我的 GAE 应用程序中访问模板文件(或任何数据文件)?

谢谢!

4

3 回答 3

1

假设文件不在static_dirorstatic_files目录中,文件会自动上传。请参阅 App Engine 文档中的跳过文件部分。App Engine 将此类目录和文件视为静态资源,静态资源与应用程序分开提供。

静态资源通常不能从应用程序代码访问。如果您必须将模板与其他静态资源放在同一目录中,则可以使用该application_readable设置使您的应用也可以访问这些资源。

但正如您所注意到的,您可以将模板放在应用程序中未映射到静态资源路径的位置;这可能是正确的做法。

于 2014-08-05T00:51:12.200 回答
1

项目目录中的所有文件都会自动上传。

如果您的应用需要访问它们(这是您使用模板时的情况),您不能将它们标记为静态。这就是第一个解决方案失败的原因。

第二次尝试也不起作用,因为上传不是 url 描述的成员。

在您的情况下,只需部署您的应用程序,文件将自动上传并可供您的应用程序使用(您可能需要获取项目的基本路径以构建模板的完整路径)。

于 2012-09-26T20:29:31.690 回答
0

在 [1] 检查 app.yaml 的不同选项。您可以检查 static_dir 和 static_files 选项。我正在分享一个能够下载静态文件的示例。这些文件位于静态文件夹和测试文件夹中。我分享我的 app.yaml:

runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: .*
  script: main.app

- url: /test
  static_dir: test  
  application_readable: true

- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$
  application_readable: true

和 main.py:

…
import webapp2
...
class Download(webapp2.RequestHandler):
    def get(self):

      imageName = self.request.get('img-name')
      self.response.headers['Content-Disposition'] = str('attachment; filename=' + imageName)
      f = None
      try:
          f = open('static/' + imageName, 'r')
          self.response.out.write(f.read())
      except:
          self.response.out.write('Jon Wayne')

class Test(webapp2.RequestHandler):
    def get(self):

      imageName = self.request.get('tst-name')
      self.response.headers['Content-Disposition'] = str('attachment; filename=' + imageName)
      f = None
      try:
          f = open('test/' + imageName, 'r')
          self.response.out.write(f.read())
      except:
          self.response.out.write('Jon Test')

app = webapp2.WSGIApplication([
    ('/download', Download),
    ('/tst', Test)
], debug=True)

我有两个图像:fib2.png 和 fib1.jpeg 然后在 Test 文件夹中我有两个文件 fib2.tst 和 fib1.tst。

Web 是域名。

https://web.com/download?img-name=fib2.png

https://web.com/download?img-name=fib1.jpeg

https://web.com/tst?tst-name=fib2.tst

https://web.com/tst?tst-name=fib1.tst

希望这可以帮助!

[1] https://cloud.google.com/appengine/docs/standard/go/config/appref#handlers_element

于 2017-12-20T13:11:10.997 回答