如何在Google App Engine中从代码而非文件渲染Django模板
我正在写一个Google App Engine的网页应用,它会把一些HTML内容渲染到Django模板中。我想知道是否可以用一个文件或者一些和文件内容非常相似的JSON数据来渲染这个模板。能不能用Django把这个渲染结果保存到一个文件里,然后再把这个文件存到数据库中呢?
oldAPI.HTML只是api.html的一个旧版本,里面有一些小改动。用Django渲染api-html文件是没问题的。
我知道在GAE上不能存储文件,那我该怎么用Django动态地把内容渲染成存储在内存中的HTML呢?
path = ""
oldAPI = APIVersion().get_by_key_name(version)
if oldAPI is None:
path = os.path.join(os.path.dirname(__file__), "api.html")
template_values = {
'responseDict': responseDict,
}
if path:
self.response.out.write(template.render(path, template_values))
else:
self.response.out.write(template.render(oldAPI.html,template_values))
3 个回答
0
很遗憾,目前没有现成的方法可以做到这一点。不过,你可以参考一下这个函数 google.appengine.ext.webapp.template._load_user_django(这是在Python 2.5下的GAE)或者 google.appengine.ext.webapp.template._load_internal_django(这是在Python 2.7下的GAE),然后自己写一个包装器,来覆盖设置和渲染,就像GAE的源代码那样。
2
在Django中,你可以通过简单的 template.Template(my_text)
来创建一个文本模板。
4
为了在内存中渲染一个模板,你需要做一些准备工作:
应用引擎设置
首先,你需要确保Django的设置是正确的。关于这方面的信息可以在第三方库页面找到,不过我会在这里为你总结一下。
在main.py
文件中,或者你的脚本处理文件里,你需要添加以下几行代码:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.2') # Change to a different version as you like
别忘了在你的app.yaml
文件中包含django
:
libraries:
- name: django
version: "1.2"
代码设置
其次,你需要创建一个Template
对象,具体的做法可以参考Google App Engine的模板文档。比如:
from google.appengine.ext.webapp import template
# Your code...
template_string = "Hello World"
my_template = template.Template(template_string)
# `context` is optional, but will be useful!
# `context` is what will contain any variables, etc. you use in the template
rendered_output = template.render(context)
# Now, do what you like with `rendered_output`!