我收到一个奇怪的错误,它只在Live服务器上发生。我的django模板目录是这样设置的
公文包页面在多台机器上本地正常工作。它们继承自root base.html或two-column-base.html。但是,现在我已经将它们发布到了Live Box(本地计算机是Windows,Live是Linux),当我尝试加载任何公文包页面时,我得到了一个templatesyntaxError:“在呈现时捕捉到templatedoesnotexist:base.html”。在这种情况下,extends标记在根目录中不起作用(???)即使我在two-column-base.html(扩展了base.html)上直接执行“到”模板,我也会得到这个错误。Extranet页面都工作得很好,但是这些模板都位于/extranet文件夹中,并且继承自/extranet/base.html。
我检查过的可能问题:
-
服务器上的文件权限正常
-
模板目录在Live Box上是正确的(我正在使用
os.path.dirname(os.path.realpath(__file__))
使事物在机器上运行)
-
文件存在并且/templates目录与本地副本完全匹配
-
从任何损坏的模板顶部删除%扩展%块会导致模板呈现无问题。
-
手动启动shell会话,并在任何文件上调用get_template都可以工作,但在任何扩展模板上,尝试渲染都会出现相同的异常。与base.html相同,它可以完美地呈现(base.html也可以通过直接“到”模板呈现)
django 1.2,python 2.6关于webparition。提前道歉,因为这是我的第三个或第四个“我在做蠢事”的问题。我唯一能想到的X因素是这是我第一次使用Mercurial而不是SVN。不知道我怎么能通过那个把事情搞砸。
编辑:
一个可能的问题来源:本地机器是python 2.5,live是2.6。
下面是我试图呈现“two column base.html”的回溯,它扩展了“base.html”。这两个文件都在同一个目录中,所以如果它能找到第一个,它就可以找到第二个。
c
只是一个空的上下文对象。
>>> render_to_string('two-column-base.html', c)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/projectname/webapps/django/lib/python2.6/django/template/loader.py", line 186, in render_to_string
return t.render(context_instance)
File "/home/projectname/webapps/django/lib/python2.6/django/template/__init__.py", line 173, in render
return self._render(context)
File "/home/projectname/webapps/django/lib/python2.6/django/template/__init__.py", line 167, in _render
return self.nodelist.render(context)
File "/home/projectname/webapps/django/lib/python2.6/django/template/__init__.py", line 796, in render
bits.append(self.render_node(node, context))
File "/home/projectname/webapps/django/lib/python2.6/django/template/debug.py", line 72, in render_node
result = node.render(context)
File "/home/projectname/webapps/django/lib/python2.6/django/template/loader_tags.py", line 103, in render
compiled_parent = self.get_parent(context)
File "/home/projectname/webapps/django/lib/python2.6/django/template/loader_tags.py", line 100, in get_parent
return get_template(parent)
File "/home/projectname/webapps/django/lib/python2.6/django/template/loader.py", line 157, in get_template
template, origin = find_template(template_name)
File "/home/projectname/webapps/django/lib/python2.6/django/template/loader.py", line 138, in find_template
raise TemplateDoesNotExist(name)
TemplateSyntaxError: Caught TemplateDoesNotExist while rendering: base.html
我想知道这是否与刚添加到django的模板缓存有关。
编辑2(根据Lazerscience):
模板相关设置:
import os
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, 'templates'),
)
样本视图:
def project_list(request, jobs, extra_context={}):
context = {
'jobs': jobs,
}
print context
context.update(extra_context)
return render_to_response('portfolio/index.html', context, context_instance=RequestContext(request))
编辑:已删除的死链接