2014-04-07 11 views
5

Hej! Viele Threads hier hatten die gleiche Überschrift, aber keine von ihnen löste mein Problem. Ich habe eine Django-Site, auf die ich zugreifen kann/admin (aber es sieht hässlich aus). Aber auf/es erscheint die folgende Fehlerseite (DEBUG = True in settings.py):TemplateDoesNotExist at/

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 der Tat, die Datei /home/django/django/templates/iecl_dev/index.html existiert, und ich habe auch versucht, chmod o+r index.html ohne Erfolg .

Die Ausgabe von python iecl_dev/manage.py runserver 0.0.0.0:0 ist

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 scheint hier alles in Ordnung.

Was mich verblüfft: Die * .pyc-Dateien werden automatisch erstellt, wenn * .py-Dateien ausgeführt werden, oder? Nach python iecl_dev/manage.py runserver 0.0.0.0:0 ist eine Datei /home/django/django/iecl_dev/settings.pyc erstellt. Aber es wird nicht erstellt, wenn ich die Seite in meinen Webbrowser lade. Heißt das, die settings.py wird nie geladen? Und wie kann Django sagen, eine Datei, die existiert, würde nicht existieren?

Edit¹:
Mein settings.py sieht wie folgt aus:

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. Das ist jetzt für mich gelöst. Die Lösung war ein Konglomerat verschiedener Dinge. Eines der Probleme waren die fehlenden Rechte. Der Benutzer, der Django ausführt, konnte den Inhalt des Verzeichnisses templates/nicht auflisten. chmod o+x templates/ hat den Job gemacht. Dann gab es einige Einstellungen in der Datei settings.py, die den Ort änderten, um nach Vorlagen aus templates/iecl_dev/nach iecl_dev/templates/zu suchen. Ich habe diesen falschen Pfad in der Fehlermeldung in meinem Webbrowser gesehen. Das Zurücksetzen von settings.py auf die alte Version war jedoch nicht ausreichend. Einige Dienste mussten neu gestartet werden. Ich habe die Maschine einfach neu gestartet und alles war gut. Wie durch ein Wunder sieht die Seite/admin/nun auch gut aus.

Vielen Dank für Ihre Tipps.

+1

Und wo Sie versuchen, die Vorlage zu machen. –

+0

Siehe meine Antwort hier, wenn es noch nicht behoben ist, http://Stackoverflow.com/a/32358905/303681 – mmrs151

Antwort

12

Von dem, was Sie gezeigt haben, denke ich, haben Sie möglicherweise ein Problem mit Ihrem Projekt-Layout.

Normalerweise wird sie wie folgt festgelegt:

├── 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 

Wie Sie sehen können, kann jede App in Ihrem Projekt haben sie eigene templates Verzeichnis ist. yourproject ist ein bisschen particular, weil es auch eindeutige Dateien wie 10 und wsgi.py speichert. Sie können es jedoch als App betrachten und verwenden. Wenn Sie eine in yourproject/templates gespeicherte Vorlage verwenden möchten, müssen Sie yourproject zu Ihren INSTALLED_APPS Einstellungen hinzufügen.

Hilft es? Wenn nicht, können Sie Ihren ursprünglichen Post mit Ihrem Projektlayout bearbeiten?

+0

Ok. Hört sich interessant an. Aber mein Layout unterscheidet sich komplett von diesem (siehe oben). Ich bin nicht der Autor dieser Website und kann den Grund nicht angeben. Also, wenn meine manage.py und meine settings.py in. Sind, dann sind die Vorlagen in ../templates/iecl_dev/. Was soll ich jetzt zu INSTALLED_APPS hinzufügen? – user3506025

+0

Da Ihr Layout wirklich anders ist als das, was ich normalerweise weiß, habe ich keine Ahnung, wie Sie es zum Laufen bringen können. Vielleicht können Sie versuchen @ Ishan070692 anwser. Wenn Ihre Website nicht zu groß ist und es keinen Grund für dieses spezielle Layout gibt, würde ich vorschlagen, dass Sie Ihr Projekt umgestalten, indem Sie [Django Documentation] folgen (https://docs.djangoproject.com/en/1.6/intro/tutorial01/) Ratschläge. Es wird Ihren Entwicklungsprozess erleichtern und die Menschen werden in der Lage sein, Ihr Projekt zu verstehen und Ihnen schneller zu helfen. –

+0

Danke für diese großartige Erklärung und Lösung! Ich hatte ein ähnliches Problem und das löste es nicht nur, sondern machte es auch sinnvoll. – Synthead

5

Der Grund könnte sein, dass django versucht, im Verzeichnis mit der Datei setting.py nach Ihrem Vorlagenverzeichnis zu suchen. Während sich das Vorlagenverzeichnis im übergeordneten Verzeichnis befindet. Versuchen Sie, in Ihren Einstellungen so etwas zu tun.py

SETTINGS_PATH = os.path.dirname(__file__) 
PROJECT PATH = os.path.join(SETTINGS_PATH, os.pardir) 
PROJECT_PATH = os.path.abspath(PROJECT_PATH) 
TEMPLATES_PATH = os.path.join(PROJECT_PATH, "templates") 

TEMPLATE_DIRS = (
    TEMPLATES_PATH, 
) 

Der Fehler ist in der Regel durch falsch konfigurierte Vorlagen Verzeichnis