我使用谷歌应用引擎,在0.96我没有问题包括模板如下
{% include "../header.html" %}
然而,在1.2上面的代码不起作用??
有什么想法吗?
答案 0 :(得分:3)
原因是google.appengine.ext.webapp.template.render
不使用任何用户可配置的TEMPLATE_DIRS
。相反,它通过获取给定模板的目录并在TEMPLATE_DIRS
使用它来发明自己的TEMPLATE_DIRS
。这意味着如果您致电render("foo/bar/fie")
,它将使用foo/bar
作为您的模板目录,并从那里查找文件。
现在,从0.96到1.2的变化是文件查找从使用os.path.join
切换到使用django.utils._os.safe_join
,这不允许使用../
从基本目录中转义。
我没有看到任何明显的方法。您似乎必须直接在模板目录中使用文件调用render
,而不是在子目录中。
答案 1 :(得分:2)
dkagedal在对问题的评估中是正确的,但是如果你不反对monkeypatching,那么这是一个简单的解决方法:
try:
# Bypass Django's safe_join for template paths since App Engine sandboxes the
# filesystem anyway, and safe_join won't allow relative includes because
# webapp.template always sets the template's parent directory as the "root",
# rather than the app's real root directory.
from django.utils import _os
_os.safe_join = os.path.join
except ImportError:
pass # App is using a version of Django that doesn't use safe_join, it's OK.
答案 2 :(得分:0)
这似乎很奇怪,这不起作用 - 这是标签的正确语法......
它怎么不工作?根本没有引入数据?错误信息?
header.html是否只是常规html的正文部分?或者它是一个完整的独立HTML页面? (即它有html,head,body,tags等?还是只有h,p等?)
也许尝试使用此处记录的{%ssi%}标记: SSI Template Tag