2

我知道如何使用jinja2生成 html 页面作为对 GAE 上的 url 的响应(https://developers.google.com/appengine/docs/python/gettingstartedpython27/templates)。

我需要用来jinja2创建一个实际的 xml 文件并将其保存在我的服务器上。

有人使用名为的工具的示例util位于http://blog.notdot.net/2009/10/Blogging-on-App-engine-part-9-Sitemaps-and-reviewhttps://github.com/ Arachnid/bloggart/blob/part9/static.py(第 47 行)。

UTIL 示例的片段(没关系他正在创建站点地图):

rendered = utils.render_template('sitemap.xml', {'paths': paths})
set('/sitemap.xml', rendered, 'application/xml', False)

可以Jinja2做这样的事情吗?

我尝试了很多事情,包括以下内容:

data = jinja_environment.get_template('for_xml.html')
fo = open("/myfile.xml","w+")
fo.write(data)
fo.close()

到目前为止,无论我使用w+还是wb收到错误:

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 632, in __init__
raise IOError('invalid mode: %s' % mode)
IOError: invalid mode: w+

当我setUTIL示例中使用时,它说set需要 1 个参数而不是 4 个。

4

3 回答 3

3

Google 应用引擎沙盒不允许您写入文件系统。- 看看这里的沙盒部分。

您引用的站点地图示例将创建对客户端的 XML 响应。

于 2012-12-21T18:08:58.793 回答
1

您不能将文件写入 GAE 服务器,但是可以将文件写入blobstoreCloud Storage。请参阅 api,因为它们提供了一些类似 File 的对象来写入。

ps:使用 set 时会出现错误,因为它指的是用户定义的函数,我猜在您的代码中您没有包含该定义,因此您实际上是在使用 set 构造函数,它只接受一个参数。

于 2012-12-21T18:54:47.727 回答
0

当您需要动态站点地图时,为什么不即时创建它。第二:使用 Jinja2,您还可以使用 XML 模板 = 读取 XML 模板,而不仅仅是 html。

结论:创建一个非静态处理程序,用于动态创建“sitemap.xml”,jinja 将呈现您的 sitemap.xml 结果。

于 2012-12-21T19:52:36.193 回答