如何从代码而不是文件渲染django模板

时间:2013-03-15 12:46:38

标签: python django google-app-engine django-templates webapp2

我正在编写一个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))

3 个答案:

答案 0 :(得分:4)

为了在内存中呈现模板,您需要做一些事情:

App Engine设置

首先,您需要确保为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源。