Django TemplateSyntaxError только на живом сервере (шаблоны существуют) - PullRequest
1 голос
/ 05 июня 2010

Я получаю странную ошибку, которая возникает только на живом сервере. Мой каталог шаблонов Django настроен так:

  • base.html
  • two-column-base.html
  • портфель
    • index.html
  • экстранет
    • base.html
    • index.html

Страницы портфолио работают корректно локально на нескольких машинах. Они наследуются от корневого base.html или two-column-base.html. Однако теперь, когда я разместил их в live box (локальные машины - Windows, live - в Linux), я получаю TemplateSyntaxError: "Caught TemplateDoesNotExist при рендеринге: base.html" при попытке загрузить любые страницы портфолио. Кажется, это тот случай, когда тег extends не будет работать в этом корневом каталоге (???). Даже если я сделаю direct_to_template для two-column-base.html (который расширяет base.html), я получаю эту ошибку. Все страницы экстрасети работают отлично, но все эти шаблоны находятся в папке / extranet и наследуются от /extranet/base.html.

Возможные проблемы, которые я проверял:

  • права доступа к файлам на сервере в порядке
  • правильная директория шаблонов на live box (я использую os.path.dirname(os.path.realpath(__file__)), чтобы все работало на разных машинах)
  • файлы существуют, и каталоги / templates точно соответствуют моей локальной копии
  • удаление блока {% extends%} сверху любого поврежденного шаблона приводит к тому, что шаблоны отображаются без проблем
  • Ручной запуск сеанса оболочки и вызов get_template для любого из файлов работает, но попытка его визуализации взрывается с тем же исключением в любом из расширенных шаблонов. Делая то же самое с base.html, он рендерит отлично (base.html также рендерит через direct_to_template)

Django 1.2, Python 2.6 на Webfaction. Заранее извиняюсь, потому что это мой третий или четвертый вопрос "я делаю что-то глупое" подряд. Единственный x-фактор, о котором я могу подумать, это то, что я впервые использую Mercurial вместо SVN. Не уверен, как я мог все испортить.

РЕДАКТИРОВАТЬ: Один из возможных источников проблем: локальный компьютер - Python 2.5, live - 2.6.

Вот отрывок из моей попытки рендеринга 'two-column-base.html', который расширяет 'base.html'. Оба файла находятся в одном каталоге, поэтому, если он может найти первый, он может найти второй. c это просто пустой объект Context.

>>> 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 (за каждую науку):

настройки шаблона:

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 ]

3 голосов
/ 07 июня 2010

ARGH: я должен был опубликовать расширения давно. Ради потомков и всех тех, кто столь же глуп, как я, которому удается вспомнить, как дышать и понять Google, вот преступник, который работает в Windows, но не в Linux.

{% extends "two-column-base.html"%}

вместо

{% extends "two-column-base.html"%}

0 голосов
/ 26 июля 2010

{% extends "two-column-base.html"%} вместо {% extends "two-column-base.html"%}

Да, это тоже вызвало у меня головную боль !!! Вплоть до того момента, когда я сделал полную переустановку Django на сервере.

Thxs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...