TemplateDoesNotExist at /
Question: 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.


Answer: From what you've shown, I think you may have a problem with your project
layout.

Usually, it is set as follows :

    
    
    ├── manage.py
    ├── yourproject
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── templates
    │   ├── urls.py
    │   ├── wsgi.py
    │   └── wsgi.pyc
    ├── yourfirstapp
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── models.py
    │   ├── templates
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    ├── yoursecondapp
        ├── __init__.py
        ├── admin.py
        ├── models.py
        ├── templates
        ├── tests.py
        ├── urls.py
        └── views.py
    

As you can see, each app inside your project can have it's own `templates`
directory.`yourproject` is a bit particuliar, because it also stores unique
files, such as `settings.py`and `wsgi.py`. However, you can consider and use
it as an app.

Now, if you want to use a template stored in `yourproject/templates`, you'll
have to add `yourproject` to your `INSTALLED_APPS` settings.

Does it helps ? If not, can you edit your original post with your project
layout ?

