Ошибка Django 1.3.7 TemplateDoesNotExist admin/index.html

#python #django #ubuntu

#python #django #ubuntu

Вопрос:

На этом сайте задается множество вопросов, похожих на этот, но я не смог найти ни одного, который мог бы объяснить это конкретное поведение.

Я относительно новичок в django и Ubuntu, поэтому, возможно, объяснение простое. Это старый (версия v1.3.7) проект django, который я пытаюсь перенести на новый сервер.

Вот полная ошибка, которую я получаю в моем журнале apache:

 TemplateDoesNotExist at /admin/
admin/login.html
Request Method: GET
Request URL:    http://131.212.123.7:26080/glrimon/admin/
Django Version: 1.3.7
Exception Type: TemplateDoesNotExist
Exception Value:    
admin/login.html
Exception Location: /.../leave_beave/lib/python2.7/site-packages/django/template/loader.py in find_template, line 138
Python Executable:  /.../leave_beave/bin/python
  

leave_beave это имя моего virtualenv.

Вот информация, переданная с помощью обратной трассировки:

 Template-loader postmortem

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/glri_mon/siteweb/templates/admin/login.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
/glri_mon/siteweb/gps_upload/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/siteapp/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/glrimon_models/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/sdde/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/dv/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/contains/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/sqlwrite/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/tinymce/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/mptt/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/menus/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/plugins/text/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/plugins/picture/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/plugins/link/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/plugins/file/templates/admin/login.html (File does not exist)
/.../leave_beave/lib/python2.7/site-packages/cms/plugins/snippet/templates/admin/login.html (File does not exist)
/glri_mon/siteweb/cmsplugin_rst/templates/admin/login.html (File does not exist)
  

glri_mon является каталогом проекта django.
Вот путь к шаблону, о котором идет речь: /.../leave_beave/django/contrib/admin/templates/admin/index.html . Есть мысли о том, почему django не включил этот путь в свой поиск?

Вот мои загрузчики шаблонов из settings.py:

 TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)
  

Я получил эту же ошибку для более ранней проблемы, и я решил ее, создав символическую ссылку из рассматриваемого каталога шаблонов ( .../python2.7/site-packages/lib.../package/templates ) на мой /project_dir/templates каталог, который настроен как мой каталог шаблонов в settings.py:

 TEMPLATE_DIRS = (
    os.path.join(PATH, 'templates'),
) 
  

Я сделал это в то время, так как думал, что это одноразовое решение для взлома, но теперь я получаю ту же ошибку при попытке получить доступ к странице администратора моего сайта (http://…/admin /). Это говорит мне, что я делаю это неправильно.

Полагаю, я мог бы добавить символическую ссылку в каждый каталог шаблонов, который генерирует эту ошибку, но это не кажется хорошей идеей для производственного сайта.

Чего я здесь не понимаю?

Комментарии:

1. Есть ли у вас django.contrib.admin в вашей INSTALLED_APPS настройке?

2. Я действительно. Спасибо за проверку.

3. Поскольку вы работаете в Apache, вам потребуется настроить статические файлы. Вы это сделали?

4. Все статические файлы загружаются корректно по крайней мере для одного из приложений в рамках этого проекта django. Должен ли я опубликовать свою конфигурацию apache? Может ли это быть чем-то там?

5. Вам абсолютно определенно не следует использовать Django 1.3.

Ответ №1:

Более новые версии pip создадут колесо для пакета, чтобы ускорить установку при следующем его использовании. Однако из-за этого шаблоны устанавливаются в корневой каталог виртуальной среды.

В 1.4.22 был добавлен обходной путь для отключения создания колеса — https://github.com/django/django/commit/3b324970e390a6dc4c373db036d6f27300d7fded, однако все, что было до этого, создало бы файлы wheel, которые вызывают проблемы, такие как отсутствие шаблонов.

Официальная поддержка файлов wheel была добавлена в 1.5.1 — https://github.com/django/django/commit/4391718f26466f82f943e37368181d5c0520fa35.

В pip версии 19 вы можете пропустить установку / создание колеса с помощью pip install --no-binary Django Django==1.3.7 . Более старые версии pip могут иметь немного отличающиеся аргументы командной строки.

Ответ №2:

В интересах полноты я решил эту проблему, явно добавив путь к /admin шаблонам в TEMPLATE_DIRS в settings.py:

 TEMPLATE_DIRS = (
    os.path.join(PATH, 'templates'),
    "/.../leave_beave/django/contrib/admin/templates",
)
  

Я сомневаюсь, что это был предполагаемый способ решения этой проблемы для django 1.3, но это решило мою проблему.

Ответ №3:

Очевидно, что Django не может выполнить поиск шаблонов администратора! Вероятно, это может быть случай, когда /.../leave_beave/django/contrib/admin/templates каталог отсутствует. Но шансы на это минимальны.

Если это не так, и если вы используете Django 1.8 , то вам необходимо пересмотреть настройку шаблонов в настройках вашего проекта. Убедитесь, что вы правильно определили TEMPLATE_LOADERS и TEMPLATES .

 TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.Loader',
    'django.template.loaders.filesystem.Loader',
)
  

Это загрузчик Django по умолчанию, и его не нужно определять явно.

 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.static',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
] 
  

В TEMPLATES настройках необходимо проверить, установлено ли значение APP_DIRS равным True . Если это значение установлено как False , Django не сможет искать шаблоны уровня приложения. Таким образом, не удастся обнаружить шаблоны администратора.

Ответ №4:

На самом деле это решило проблему:

 pip install --no-binary Django Django==1.3.7