2010-06-04 2 views
1

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

  • base.html
  • две колонки-base.html
  • портфель
    • index.html
  • экстранет
    • base.html
    • index.html

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

Возможные проблемы я проверил:

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

Django 1.2, Python 2.6 on Webfaction. Извиняюсь заранее, потому что это мой третий или четвертый вопрос «Я делаю что-то глупо» подряд. Единственный х-фактор, о котором я могу думать, это мой первый раз, используя Mercurial вместо ofsvn. Не уверен, как я мог бы испортить все это.

EDIT: Возможный источник проблем: локальная машина Python 2.5, live is 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.

EDIT 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)) 

EDIT: удалены мертвые ссылки

+1

Любой шанс у вас есть где-то на своем пути шаблона смешивает с обратным косой чертой косой черты, которая будет работать на окнах, но не на Linux? –

+0

Есть ли шанс, что у вас будет неожиданный артефакт (старый шаблон)? Когда вы развертываете на производство, удаляете ли вы всю прежнюю иерархию шаблонов? –

+0

Нет, нет обратной косой черты, но хорошая идея. Что будет квалифицироваться как артефакт/старый шаблон? Я развертываю через hg pull & hg update. – Tom

ответ

3

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

{% проходит «две колонки-base.html "%}

вместо

{% проходит "две колонки-base.html" %}

+0

Итак, этот вопрос закрыт? – dplass

+0

Si, сеньор. Есть ли что-то еще, что я должен сделать, чтобы закрыть его? Я не хочу присуждать ответ самому себе. – Tom

+0

Я уверен, что вы не получите награду/репутацию, если вы ответите на свой собственный вопрос, поэтому не стесняйтесь отмечать это как ответ. –

0

{% распространяется" two-column-base.html "%} вместо {% extends" two-column-base.html "%}

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

Thxs