TemplateDoesNotExist at /

Hej! Many threads here had the same caption, but none of them solved my problem. I have a Django site an can access /admin (but it looks ugly). But on / there appears the following error page (DEBUG = True in settings.py):

TemplateDoesNotExist at /

index.html

Request Method:     GET  
Request URL:    http://iecl.uni-potsdam.de/  
Django Version:     1.4.5  
Exception Type:     TemplateDoesNotExist  
Exception Value:    

index.html

Exception Location:     /usr/lib/python2.7/dist-packages/django/template/loader.py in find_template, line 138  
Python Executable:  /usr/bin/python  
Python Version:     2.7.3  
Python Path:    

['/home/python/iecl/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg',  
 '/home/python/iecl/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg',  
 '/usr/lib/python2.7',  
 '/usr/lib/python2.7/plat-linux2',  
 '/usr/lib/python2.7/lib-tk',  
 '/usr/lib/python2.7/lib-old',  
 '/usr/lib/python2.7/lib-dynload',  
 '/usr/local/lib/python2.7/dist-packages',  
 '/usr/lib/python2.7/dist-packages',  
 '/usr/lib/pymodules/python2.7',  
 '/home/python/iecl/lib/python2.7/site-packages',  
 '/home/django/django']

Server time:    Mon, 7 Apr 2014 11:28:46 +0200  
Template-loader postmortem

Django tried loading these templates, in this order:

    Using loader django.template.loaders.filesystem.Loader:  
        /home/django/django/templates/iecl_dev/index.html (File does not exist)  
    Using loader django.template.loaders.app_directories.Loader:  
        /usr/lib/python2.7/dist-packages/django/contrib/auth/templates/index.html (File does not exist)  
        /usr/lib/python2.7/dist-packages/django/contrib/admin/templates/index.html (File does not exist)

In fact, the file /home/django/django/templates/iecl_dev/index.html does exist and I also tried chmod o+r index.html without success.

The output of python iecl_dev/manage.py runserver 0.0.0.0:0 is

Validating models...

0 errors found  
Django version 1.4.5, using settings 'iecl_dev.settings'  
Development server is running at http://0.0.0.0:0/  
Quit the server with CONTROL-C.

so everything seems fine here.

What perplexes me: The *.pyc files are created automatically when *.py files are run, right? After python iecl_dev/manage.py runserver 0.0.0.0:0 there is a file /home/django/django/iecl_dev/settings.pyc created. But it is not created, when I load the page in my web browser. Does that mean, the settings.py is never loaded? And how can Django say, a file, which exists, would not exist?

Edit¹:
My settings.py looks as follows:

import django.conf.global_settings as DEFAULT_SETTINGS
import os
DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
)

SETTINGS_PATH = os.path.realpath(os.path.dirname(__file__))

MANAGERS = ADMINS
DATABASES = {                                                                                                                                                          $
    'default': {                                                                                                                                                       $
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'iecl',                      # Or path to database file if using sqlite3.
                'USER': 'iecl',                      # Not used with sqlite3.
        'PASSWORD': '<xxx>',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.                                                                   $
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}
TIME_ZONE = 'Europe/Berlin'

LANGUAGE_CODE = 'en-us'

SITE_ID = 1

USE_I18N = True

MEDIA_ROOT = '/var/www/django_media/iecl_dev/media/'
MEDIA_URL = ''

ADMIN_MEDIA_PREFIX = '/media/admin_media/'

SECRET_KEY = '<xxx>'

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

MIDDLEWARE_CLASSES = (
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'iecl_dev.urls'

TEMPLATE_DIRS = (
        os.path.join(SETTINGS_PATH, 'templates'),
)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
        'iecl_dev.showStudents',
        'django.contrib.admin',
)

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
)

Edit²:

The contents of `/home/django/django/` are as follows:

/home/django/django/:
iecl2
iecl_dev
templates

/home/django/django/iecl2:
__init__.py
__init__.pyc
manage.py
settings.py
settings.pyc
showStudents
urls.py
urls.pyc

/home/django/django/iecl2/showStudents:
__init__.py
__init__.pyc
admin.py
context_processors.py
models.py
models.pyc
views.py
views.pyc

/home/django/django/iecl_dev:
__init__.py
__init__.pyc
manage.py
piwik
settings.py
settings.pyc
showStudents
urls.py
urls.pyc

/home/django/django/iecl_dev/piwik:
__init__.py
app_settings.py
context_processors.py
models.py
tests.py
urls.py
views.py 

/home/django/django/iecl_dev/showStudents:
__init__.py
__init__.pyc
admin.py
context_processors.py
models.py
models.pyc
views.py

/home/django/django/templates:
iecl
iecl_dev
/home/django/django/templates/iecl:
500.html
admin
changePW.html
editStudent.html
feedback.html
feedback_thanks.html
index.html
location.html
login.html
page.html
password_changed.html
showStudent.html
studentsOverview.html

/home/django/django/templates/iecl/admin:
404.html
500.html
actions.html
app_index.html
auth
base.html
base_site.html
change_form.html
change_list.html
change_list_results.html
date_hierarchy.html
delete_confirmation.html
delete_selected_confirmation.html
edit_inline
filter.html
includes
index.html
invalid_setup.html
login.html
object_history.html
pagination.html
prepopulated_fields_js.html
search_form.html
showStudents
submit_line.html

/home/django/django/templates/iecl/admin/auth:
user

/home/django/django/templates/iecl/admin/auth/user:
add_form.html
change_password.html

/home/django/django/templates/iecl/admin/edit_inline:
stacked.html
tabular.html

/home/django/django/templates/iecl/admin/includes:
fieldset.html

/home/django/django/templates/iecl/admin/showStudents:
pagecontent
userpagecontent

/home/django/django/templates/iecl/admin/showStudents/pagecontent:
change_form.html

/home/django/django/templates/iecl/admin/showStudents/userpagecontent:
change_form.html

/home/django/django/templates/iecl_dev:
500.html
__init__.py
admin
changePW.html
editStudent.html
feedback.html
feedback_thanks.html
index.html
location.html
login.html
page.html
password_changed.html
piwik
showStudent.html
studentsOverview.html

/home/django/django/templates/iecl_dev/admin:
404.html
500.html
actions.html
app_index.html
auth
base.html
base_site.html
change_form.html
change_list.html
change_list_results.html
date_hierarchy.html
delete_confirmation.html
delete_selected_confirmation.html
edit_inline
filter.html
includes
index.html
invalid_setup.html
login.html
object_history.html
pagination.html
prepopulated_fields_js.html
search_form.html
showStudents
submit_line.html

/home/django/django/templates/iecl_dev/admin/auth:
user

/home/django/django/templates/iecl_dev/admin/auth/user:
add_form.html
change_password.html

/home/django/django/templates/iecl_dev/admin/edit_inline:
stacked.html
tabular.html

/home/django/django/templates/iecl_dev/admin/includes:
fieldset.html

/home/django/django/templates/iecl_dev/admin/showStudents:
pagecontent
userpagecontent

/home/django/django/templates/iecl_dev/admin/showStudents/pagecontent:
change_form.html

/home/django/django/templates/iecl_dev/admin/showStudents/userpagecontent:
change_form.html

/home/django/django/templates/iecl_dev/piwik:
tracking.html

Edit³:
Ok. This is solved for me now. The solution was a conglomerate of different things. One of the problems was the missing rights. The user that executes Django, could not list the contents of the templates/ directory. chmod o+x templates/ did the job. Then there were some settings in the settings.py, that changed the place to look for the templates from templates/iecl_dev/ to iecl_dev/templates/. I saw this wrong path in the error message in my web browser. But simply reverting the settings.py to the old version, was not enough. Some service(s) needed to be restarted. I simply rebooted the machine and everything was fine. Miraculously, the /admin/ page now looks nice as well.

Many thanks for all your tips.

Leave a Comment