0

我正在尝试为我的应用程序构建一个简单的 CRUD 管理部分。基本上,对于给定的模型,我希望通过模型的属性将模板循环到一个简单的表中(一旦这样做,我实际上可以实现 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 吗?

谢谢!

4

3 回答 3

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
于 2009-04-14T13:19:06.980 回答
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)

您可以轻松地做一些非常相似的事情并将结果保存在数据存储中。

于 2009-04-13T23:40:59.427 回答
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>

我按照这个谷歌搜索的博客条目在我的应用程序中获取了 Mako - 它非常简单,并且就像一个魅力。

于 2009-05-16T09:08:46.800 回答