2013-03-15 80 views
6

我正在编写一个Google App Engine Web应用程序,它将一些HTML呈现给Django模板。我想要使​​用文件或只是一些非常类似于文件的json来呈现模板。是否有可能使用Django将其渲染为读入并存储在数据库中的文件? oldAPI.HTML只是api.html的一个旧版本,但只做了一些小改动。将Django渲染到api-html文件可以正常工作。如何从代码而不是文件渲染Django模板

我知道你不能在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

可以存储在Blob存储区http://stackoverflow.com/questions/81451/upload-files-in-google-app-engine – 2013-03-18 08:50:19

+0

是的文件,但后来我不得不做出来自读取文件的模板。怎么样? – hakonbogen 2013-03-18 08:58:39

回答

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 

不要忘记,包括djangoapp.yaml

libraries: 
    - name: django 
     version: "1.2" 

代码设置

其次,您需要创建一个Template对象,如所示。例如:

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`! 
+0

当我尝试这个我得到的错误:AssertionError:设置尚未在此线程中配置。我还需要启用某种设置吗? – hakonbogen 2013-03-20 10:07:18

+0

您可能需要在与app.yaml相同的文件夹中创建一个简单的'settings.py'文件。 [本文](https://developers.google.com/appengine/articles/django)有一个您可以使用的settings.py文件示例。我承认文章已过时,但*该*信息应该仍然相关。 – NT3RP 2013-03-20 15:31:24

2

您可以在Django中仅以template.Template(my_text)实例化文本中的模板。

+0

我收到AssertionError:当我尝试从文本实例化temlate时,此线程中尚未配置设置。尝试与HTML和template.Template(“你好世界”) – hakonbogen 2013-03-15 13:05:33

+0

也许只是尝试使用StringIO? – 2013-03-15 15:52:50

+0

使用它的语法是什么? – hakonbogen 2013-03-18 08:19:35