我知道如何使用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-review或https://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个。
答案 0 :(得分:3)
Google应用引擎沙箱不允许您写入文件系统。 - 查看 The Sandbox 部分here。
您引用的站点地图示例应该是为客户创建XML响应。
答案 1 :(得分:1)
您无法将文件写入GAE服务器,但您可以将文件写入blobstore或Cloud Storage。请参阅apis,因为它们提供了一些类似文件的对象来写入。
ps:当使用set时你会收到一个错误,因为它引用了用户定义的函数,我猜你的代码中你没有包含那个定义,所以你实际上使用的set构造函数只接受一个参数
答案 2 :(得分:0)
当您需要动态站点地图时,为什么不动态创建它。 第二:使用Jinja2,您还可以使用XML模板=读取XML模板,而不仅仅是HTML。
Conslusion:创建一个非静态处理程序,用于动态创建“sitemap.xml”,jinja将呈现你的sitemap.xml结果。