我正在尝试为我的应用程序构建一个简单的CRUD管理部分。基本上,对于给定的Model,我想让模板循环通过模型的属性到一个简单的表中(一旦我这样做,我实际上可以实现CRUD部分)。实现此目标的一种可能方法是动态生成一个模板,其中包含特定于该模型的所有必要模板标记。
伪代码:
def generate_tamplate(model):
template.write("<table border='1'>")
template.write("<tr>")
for attribute in model:
template.write("<td>%s</td>" % attribute)
template.write("</tr>")
template.write("<tr>")
for attribute in model:
template.write("<td>{{ %s.%s }}</td>" % model.attribute)
template.write("</tr>")
template.write("</table>")
生成正确的文本应该不难。我可以按照我的伪代码模型进行Python操作。我想知道两件事: 1)我可以使用Django的模板语言来代替吗?也就是说,使用模板生成模板 2)生成文本后,如何将其写入webapp模板加载器可以访问的文件中?
我记得有一段时间看到有关从数据库加载模板的事情。这可能与GAE有关吗?
谢谢!
答案 0 :(得分:1)
我前段时间看到了这个开源项目: http://code.google.com/p/gae-django-dbtemplates/
使用模板生成模板应该没问题。只需将模板渲染为字符串即可。这里使用了一些代码,所以我可以将一些xml粘贴到memecache
中path = os.path.join(os.path.dirname(__file__), 'line_chart.xml')
xml = template.render(path, template_values)
您可以轻松地执行非常类似的操作并将结果粘贴到数据存储区中。
答案 1 :(得分:1)
是的,您可以生成下一个模板,而不是template.writes
,因为template.render(...)
只返回文字。然后,您可以存储返回的文本并将其放入DataStore,然后在以后检索它并在其上调用.render(Context(...))
以返回您要生成的html。
您无法将生成的模板写入文件 - 因为AppEngine应用程序没有对文件系统的写访问权限,只能读取访问权限。
如果您更改“generate_tamplate
”功能以使用模板,则伪代码可能如下所示:
from google.appengine.ext.webapp import template
def generate_tamplate(model):
t = template.render(path_to_template1.html, Context({'model':model}))
DataStoreTemplate(template=t, name=model.name).put()
''' Later, when you want to generate your page for that model '''
def generate_page(model):
t = DataStoreTemplate.all().filter("name =",model.name).get().template
htmlresult = t.render(Context({'model':model}))
return htmlresult
答案 2 :(得分:0)
其他选项,在我看来简化了为GAE编写应用程序,使用用户其他模板语言,如Mako,允许您在模板中嵌入Python代码,因此不需要摆弄。
您可以将模型数据传递给模板(就像template.render(template_file, model=model
一样简单),模板看起来像这样:
<table border='1'>
<tr>
% for attribute in model:
<td>${attribute}</td>
% endfor
</tr>
<tr>
% for attribute in model:
<td>${model.attribute}</td>
% endfor
</tr>
</table>
我跟着this googled blog entry在我的应用程序中获取Mako - 这很简单,就像一个魅力。