Я получаю странную ошибку, которая возникает только на реальном сервере. Мой 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: удалены мертвые ссылки
Любой шанс у вас есть где-то на своем пути шаблона смешивает с обратным косой чертой косой черты, которая будет работать на окнах, но не на Linux? –
Есть ли шанс, что у вас будет неожиданный артефакт (старый шаблон)? Когда вы развертываете на производство, удаляете ли вы всю прежнюю иерархию шаблонов? –
Нет, нет обратной косой черты, но хорошая идея. Что будет квалифицироваться как артефакт/старый шаблон? Я развертываю через hg pull & hg update. – Tom