AppEngine和Django:包括模板文件

时间:2009-01-22 17:12:55

标签: python django google-app-engine templates include

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

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

我原以为包含{%include“fileToInclude.html”%}会自行运行,但根本不包含任何内容。我假设我必须设置一些东西,可能使用TEMPLATE_DIRS,但无法自己解决。

编辑:

我试过了:

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

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

4 个答案:

答案 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)