1

我在 Google App Engine 中使用图像、html 文件和 javascript 时遇到问题。我的应用程序文件夹中有一个名为 static 的文件夹。在静态文件夹中,我还有 3 个名为“images”、“html”和“javascript”的文件夹。我的 app.yaml 的处理程序部分如下,

handlers:
- url: /html
  static_dir: static/html

- url: /javascript
  static_dir: static/javascript

- url: /images
  static_dir: static/images

- url: /.*
  script: index.app

我尝试使用以下方式访问图像,

self.response.out.write('<img src="images/image.png">')

我使用 jinja2 渲染一个 html,

jinja_environment = jinja2.Environment(autoescape=True,
                    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'html')))

template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(template_values))

我收到一个错误,找不到 jinja 的模板,也找不到我的图像。我认为这是使用 Google App Engine 上传和使用文件的正确方法,但显然我错了。

我可以通过 Google App Engine 使用文件夹中的文件的正确方法是什么?

4

2 回答 2

1

如果您要在 HTML 中使用模板系统,则不想将其声明为static_dir,原因是静态文件存储在与应用程序文件不同的文件系统中,因此它们将无法呈现. 当您使用 时os.path.dirname(__file__).....,您正在寻找应用程序文件系统中的文件,这与static您指定的目录不同。所以首先要尝试的是删除:

- url: /html
  static_dir: static/html

从你的处理程序。然后,这将查找您的应用程序文件系统并(希望 :))找到它。您的图像处理程序看起来不错,所以我会先尝试一下,看看它是否有所作为。

于 2012-12-02T03:13:29.640 回答
1

使用 Jinja,您可以渲染一个编写 HTML 的模板。那不是静态服务。

在您的 app.yaml 中,您使用: static/images 或 static/html 但在您的代码中,您使用另一条路径!没有静态文件夹。

因此,如果您有一个静态文件夹,并且在该文件夹中您有一个文件夹图像:

self.response.out.write('<img src="/images/image.png">')

还有你的装载机:

jinja_environment = jinja2.Environment(autoescape=True,
                    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),'static', 'html')))
于 2012-12-02T03:20:41.153 回答