我正在编写一个Google App Engine webapp,它将一些HTML呈现给Django模板。我想要使用文件或只是一些非常类似于文件的json来渲染模板。是否可以使用Django将其呈现为读入并存储在数据库中的文件? 旧的API.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))
答案 0 :(得分:4)
为了在内存中呈现模板,您需要做一些事情:
首先,您需要确保为Django正确设置所有内容。有很多信息on the Third-party libraries page,但为了您的利益,我会将其包含在此处。
在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
不要忘记在django
中加入app.yaml
:
libraries:
- name: django
version: "1.2"
其次,您需要创建一个Template
对象,如Google App Engine template documentation所示。例如:
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`!
答案 1 :(得分:2)
您可以使用template.Template(my_text)
实例化Django中的文本模板。
答案 2 :(得分:0)
不幸的是,没有(内置)方法可以这样做,但是您可以从函数google.appengine.ext.webapp.template._load_user_django(使用Python 2.5的GAE)或google.appengine.ext.webapp.template._load_internal_django(GAE with Python 2.7)并编写您自己的包装器覆盖设置和渲染,如GAE源。