代码之家  ›  专栏  ›  技术社区  ›  Tom

Django TemplatesyntaxError仅在Live服务器上(存在模板)

  •  1
  • Tom  · 技术社区  · 15 年前

    我收到一个奇怪的错误,它只在Live服务器上发生。我的django模板目录是这样设置的

    • 基础HTML
    • 两列基本.html
    • 文件夹
      • 索引文件
    • 外联网
      • 基础HTML
      • 索引文件

    公文包页面在多台机器上本地正常工作。它们继承自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))
    

    编辑:已删除的死链接

    2 回复  |  直到 15 年前
        1
  •  3
  •   Tom    15 年前

    阿格:我早就应该贴出延期通知了。为了子孙后代和其他像我这样愚蠢的人,只要能记住呼吸并找到谷歌,这就是在Windows而不是Linux中工作的罪犯。

    %扩展“two-column-base.html”%

    而不是

    %扩展“two column base.html”%

        2
  •  0
  •   magicTuscan    15 年前

    %扩展“two-column-base.html”% 而不是 %扩展“two column base.html”%

    是的,这也让我头痛!!!! 到目前为止,我在服务器上完全重新安装了Django。

    THX

    推荐文章