6

我正在编写一个将一些 html 呈现给 Django 模板的 Google App Engine webapp。我想使用文件或仅使用一些与文件中的非常相似的 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))
4

3 回答 3

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

不要忘记包括django在你的app.yaml

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`!
于 2013-03-18T21:45:08.997 回答
2

您可以使用 Django 从文本中实例化模板template.Template(my_text)

于 2013-03-15T13:00:33.317 回答
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 源代码一样。

于 2013-03-18T16:13:37.307 回答