Джанго лжет мне?! функция render_to_response возвращает TemplateDoesNotExist, когда файл действительно существует

#django #templates #mod-wsgi

#django #шаблоны #мод-wsgi

Вопрос:

ОК. Я прочитал много других сообщений об этом, и они всегда решались, когда задающий вопрос правильно изменял свои настройки TEMPLATE_DIRS. Ни одно из этих предложений не сработало для меня. Странно то, что шаблон загружается при использовании веб-сервера Django, но выдает ошибки при использовании mod_wsgi. Я думаю, что django, возможно, выдает неверное исключение, потому что ошибка TemplateDoesNotExist просто не может применяться с учетом моих настроек.

Мой код:

мой app/views/view.py (да, у меня есть свои взгляды во вложенной папке)

   8 def index(request):
  9     return render_to_response('pages/home/base_home.html')
  

Вот мой settings.py расположен в корневом каталоге (стандартное расположение)

 106 TEMPLATE_DIRS = (
107     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
108     # Always use forward slashes, even on Windows.
109     # Don't forget to use absolute paths, not relative paths.
110     "/home/foobar/templates",
111 )
  

И, наконец, вот мое представление, расположенное по адресу /home / foobar/templates / pages /home/

   1 {% extends 'base.html' %}
  2 
  3 {% block navigation %}
  4     {% include 'modules/navigation/navigation.html' %}
  5 {% endblock %}
  6 
  7 {% block slideshow %}
  8     {% include 'modules/slideshow/slideshow.html' %}
  9 {% endblock %}
  

Кроме того, вот ls -l, доказывающий, что файл действительно существует

 foo@bar:~$ ls -l templates/pages/home/
total 12
-rwxr-xr-x 1 foo foo 205 2011-06-05 12:37 base_home.html
foo@bar:~$ 
  

Вот отчет о вскрытии, который дает мне Джанго:

 Template-loader postmortem

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/home/foobar/templates/pages/home/base_home.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/pages/home/base_home.html (File does not exist)
  

Редактировать

Вот мой файл wsgi

   3 import os
  4 import sys
  5 
  6 path = '/media/PENDRIVE/Projects/'
  7 if path not in sys.path:
  8     sys.path.append(path)
  9     
 10 os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
 11 
 12 import django.core.handlers.wsgi
 13 application = django.core.handlers.wsgi.WSGIHandler()
 14 
  

Спасибо за любую информацию, поскольку я сбит с толку и застрял!

Ответ №1:

Вы должны проверить, доступна ли папка template для чтения пользователем, с которым выполняется процесс wsgi. Я полагаю, это простая проблема с разрешением.

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

1. Привет. Спасибо за ваше предложение. мои разрешения: drwxr-xr-x 9 foo foo 4096 2011-06-05 12:57 шаблоны. Я изменил его, чтобы он был доступен для чтения всем для отладки. Все еще не работает.

2. Сама по себе папка templates не обязательно делает ее доступной для чтения процессу wsgi. Если, например, / home/ foobar ограничен для чтения только foobar, то это все равно не сработает.

3. @mu Да, я сделал. Для тестирования я рекурсивно обновил chmod 755’d для всего каталога проекта и каталога шаблонов. Любой пользователь может прочитать и выполнить все файлы. Хотя спасибо за предложение.

4. Все еще звучит как разрешения, у вас случайно не включен SELinux?

5. Я делаю. Но меня смущает то, что она работает при использовании веб-сервера django. mod_wsgi вызывает у меня проблемы. Я опубликую то, что у меня есть в этом файле, поскольку я впервые использую mod_wsgi. Кроме того, подробнее остановитесь на SELinux. Как вы думаете, в чем может быть проблема? Кроме того, вы видите какие-либо проблемы с моим кодом выше? Спасибо.

Ответ №2:

Вы не указываете правильный URL. Это должно быть «pages/home/modules/navigation/navigation.html «

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

1. Привет. Спасибо, но это не решает проблему. Я уже пытался заменить содержимое шаблона на ‘hello world’. Я все еще получаю ту же ошибку, сообщающую мне, что: /home/foobar/templates/pages/home/base_home.html (Файл не существует). Хотя спасибо!

Ответ №3:

это должно быть решено путем замены полного пути BASE_DIR в settings.py

 TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': ['/var/www/assistance/templates','templates'],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]