Моя локальная машина запускает Python 2.5 и Nginx на Ubuntu 8.10 со сборкой Django от соединительной линии последнего достижения.
Для каждого URL я запрашиваю, он бросает:
TemplateDoesNotExist в/appname/path appname/template_name.html
Django пытался загрузить эти шаблоны в этом порядке: * Используя загрузчик django.template.loaders.filesystem.function: * Используя загрузчик django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates'),
Это ищет /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html в этом случае? Странной вещью является этот файл, делает существовал на диске. Почему Django не может определить местоположение его?
Я запускаю то же приложение на удаленном сервере с Python 2.6 на Ubuntu 9.04 без такой проблемы. Другие настройки являются тем же.
Там что-нибудь неправильно конфигурируется на моей локальной машине, или что, возможно, возможно вызвало такие ошибки, которые я должен изучить?
В моем settings.py я указал:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Это должно искать следующие файлы:
Все вышеупомянутые файлы существуют на диске.
Решенный
Это работает теперь после того, как я попробовал:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
Это странно. Я не должен делать этого на удаленном сервере, чтобы заставить его работать.
Первое решение :
Эти настройки
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
означают, что Django будет искать шаблоны из каталога templates /
в вашем проекте.
Предполагая, что ваш Django проект находится по адресу /usr/lib/python2.5/site-packages/projectname/
, тогда с вашими настройками django будет искать шаблоны в /usr/lib/python2.5/site- packages / projectname / templates /
Итак, в этом случае мы хотим переместить наши шаблоны, чтобы они были структурированы следующим образом:
/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html
Второе решение :
Если это все еще не работает и при условии, что у вас есть приложения, настроенные в settings.py следующим образом:
INSTALLED_APPS = (
'appname1',
'appname2',
'appname3',
)
По умолчанию Django загружает шаблоны в templates /
под всеми установленными приложениями. Итак, с вашей структурой каталогов мы хотим переместить наши шаблоны так:
/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html
Надеюсь, что это поможет.
SETTINGS_PATH
не может быть определен по умолчанию. В этом случае вы захотите определить его (в settings.py):
import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
Убедитесь, что файл templates.html находится в /usr/lib/python2.5/site-packages/projectname/templates
директории
Проверьте разрешения для каталогов шаблонов и имен приложений с помощью ls -l или попробуйте указать абсолютный путь open () из django.
Теперь он работает после того, как я попробовал
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
Странно . Мне не нужно делать это на удаленном сервере, чтобы он заработал.
Кроме того, мне нужно запустить следующую команду на локальном компьютере, чтобы сделать все статические файлы доступными, но на удаленном сервере все они являются "root: root".
chown -R www-data:www-data /var/www/projectname/*
Локальный компьютер работает под управлением настольной версии Ubuntu 8.04. Удаленный сервер находится на сервере Ubuntu 9.04.
Кто-нибудь знает почему?
Просто догадка, но посмотрите эту статью о загрузке шаблонов Django . В частности, убедитесь, что у вас есть django.template.loaders.app_directories.Loader
в вашем списке TEMPLATE_LOADERS.