如何使用jinja在GAE上生成xml文件?

时间:2012-12-21 17:56:38

标签: xml google-app-engine jinja2

我知道如何使用jinja2生成html网页作为对GAE(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+

当我在set示例中使用UTIL时,它表示set需要1个参数而非4个。

3 个答案:

答案 0 :(得分:3)

Google应用引擎沙箱不允许您写入文件系统。 - 查看 The Sandbox 部分here

您引用的站点地图示例应该是为客户创建XML响应。

答案 1 :(得分:1)

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

ps:当使用set时你会收到一个错误,因为它引用了用户定义的函数,我猜你的代码中你没有包含那个定义,所以你实际上使用的set构造函数只接受一个参数

答案 2 :(得分:0)

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

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