如何在Google App Engine中从代码而非文件渲染Django模板

6 投票
3 回答
2094 浏览
提问于 2025-04-17 19:12

我正在写一个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`!

撰写回答