4

正如标题所示,我使用的是 Google App Engine 和 Django。

我的模板中有很多相同的代码,并希望通过包含模板文件来减少这种情况。因此,在我的主应用程序目录中,我有 python 处理程序文件、主模板和我想要包含在主模板中的模板。

我原以为包括 {% include "fileToInclude.html" %} 会单独工作,但这根本不包括任何东西。我假设我必须设置一些东西,也许使用 TEMPLATE_DIRS,但我自己无法弄清楚。

编辑:

我试过了:

TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'), )

但无济于事。我也会尝试一些其他的可能性。

4

4 回答 4

3

首先,您应该考虑使用模板继承而不是include标签,这通常是合适的,但有时远不如模板继承。

不幸的是,我没有使用 App Engine 的经验,但根据我使用常规 Django 的经验,我可以告诉您,您需要设置您的TEMPLATE_DIRS列表以包含您想要包含模板的文件夹,如您所指示的。

于 2009-01-22T18:07:57.097 回答
1

如果我不先加载模板并使用 Context 对象渲染它们,我发现它“开箱即用”。相反,我使用AppEngine 教程中显示的标准方法。

于 2009-02-02T20:25:05.583 回答
1

我遇到了同样的问题并将其追踪到 ext.webapp 包中。在 template.py 中,您会在第 33 行找到以下注释:

Django 对查找模板的目录使用全局设置。这在 webapp 模块的上下文中是不自然的,因此我们的 load 方法采用完整的模板路径,并且我们会自动设置这些设置。因为我们必须在每个方法调用上设置和使用全局设置,所以这个模块不是线程安全的,尽管这对应用程序来说不是问题。

请参阅同一文件中的第 92 行。您可以看到模板目录被压缩:

directory, file_name = os.path.split(abspath)
new_settings = {
    'TEMPLATE_DIRS': (directory,),
    'TEMPLATE_DEBUG': debug,
    'DEBUG': debug,
    }

更新:这是对我有用的解决方法 - http://groups.google.com/group/google-appengine/browse_thread/thread/c3e0e4c47e4f3680/262b517a723454b6?lnk=gst&q=template_dirs#262b517a723454b6

于 2011-04-23T02:22:30.747 回答
0

我已经完成了以下操作来使用包括:

def render(file, map={}):
  return template.render(
    os.path.join(os.path.dirname(__file__), '../templates', file), map)  

table = render("table.html", {"headers": headers, "rows": rows})   
final = render("final.html", {"table": table})

self.response.out.write(final)
于 2010-05-25T16:58:12.603 回答