Django TemplateDoesNotExist?

Моя локальная машина запускает 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'),
)

Это должно искать следующие файлы:

  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
  • /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
  • ...

Все вышеупомянутые файлы существуют на диске.

Решенный

Это работает теперь после того, как я попробовал:

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

Это странно. Я не должен делать этого на удаленном сервере, чтобы заставить его работать.

135
задан Jee 18 June 2018 в 04:39
поделиться

5 ответов

Первое решение :

Эти настройки

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__))
168
ответ дан 23 November 2019 в 23:46
поделиться

Убедитесь, что файл templates.html находится в /usr/lib/python2.5/site-packages/projectname/templates директории

.
0
ответ дан 23 November 2019 в 23:46
поделиться

Проверьте разрешения для каталогов шаблонов и имен приложений с помощью ls -l или попробуйте указать абсолютный путь open () из django.

4
ответ дан 23 November 2019 в 23:46
поделиться

Теперь он работает после того, как я попробовал

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.

Кто-нибудь знает почему?

4
ответ дан 23 November 2019 в 23:46
поделиться

Просто догадка, но посмотрите эту статью о загрузке шаблонов Django . В частности, убедитесь, что у вас есть django.template.loaders.app_directories.Loader в вашем списке TEMPLATE_LOADERS.

4
ответ дан 23 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: