正如标题所示,我正在使用Google App Engine和Django。
我的模板中有相当多的相同代码,并希望通过包含模板文件来减少这种情况。所以,在我的主应用程序目录中,我有python处理程序文件,主模板和我想要包含在主模板中的模板。
我原以为包含{%include“fileToInclude.html”%}会自行运行,但根本不包含任何内容。我假设我必须设置一些东西,可能使用TEMPLATE_DIRS,但无法自己解决。
编辑:
我试过了:
TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'), )
但无济于事。我也会尝试其他一些可能性。
答案 0 :(得分:3)
首先,您应该考虑使用template inheritance而不是include
标记,这通常是合适的,但有时远远低于模板继承。
不幸的是,我没有使用App Engine的经验,但根据我对常规Django的经验,我可以告诉您需要设置TEMPLATE_DIRS
列表以包含要包含模板的文件夹,如你所说。
答案 1 :(得分:1)
如果我不首先加载模板并使用Context对象渲染它,我发现它“开箱即用”。相反,我使用AppEngine tutorial中显示的标准方法。
答案 2 :(得分:1)
我遇到了同样的问题并将其追踪到ext.webapp包中。在template.py中,您将在第33行找到此评论:
Django使用全局设置查找模板的目录。 这在webapp模块的上下文中并不自然,所以我们的加载方法 采用完整的模板路径,我们即时设置这些设置 自动。因为我们必须在每一个上设置和使用全局设置 方法调用,这个模块不是线程安全的,虽然这不是问题 申请。
请参阅同一文件中的第92行。你可以看到模板dirs被压扁了:
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
答案 3 :(得分: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)