Auf meinem lokalen Computer werden Python 2.5 und Nginx unter Ubuntu 8.10 ausgeführt, wobei Django aus dem neuesten Entwicklungs-Trunk erstellt wurde.
Für jede angeforderte URL wird Folgendes ausgegeben:
TemplateDoesNotExist unter / appname / path appname / template_name.html
Django hat versucht, diese Vorlagen in der folgenden Reihenfolge zu laden: * Verwenden des Loaders django.template.loaders.filesystem.function: * Verwenden des Loaders django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
Sucht es in diesem Fall nach /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html ? Das Seltsame ist, dass diese Datei auf der Festplatte vorhanden ist. Warum kann Django es nicht finden?
Ich führe dieselbe Anwendung auf einem Remote-Server mit Python 2.6 unter Ubuntu 9.04 ohne ein solches Problem aus. Andere Einstellungen sind gleich.
Ist auf meinem lokalen Computer etwas falsch konfiguriert, oder was könnte möglicherweise solche Fehler verursacht haben, die ich untersuchen sollte?
In meiner settings.py habe ich angegeben:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Es sollte nach folgenden Dateien suchen:
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
- ...
Alle oben genannten Dateien befinden sich auf der Festplatte.
Gelöst
Es funktioniert jetzt, nachdem ich versucht habe:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
Es ist komisch. Ich muss dies nicht auf dem Remote-Server tun, damit es funktioniert.
Antworten:
Erste Lösung :
Diese Einstellungen
bedeutet, dass Django die Vorlagen aus dem
templates/
Verzeichnis unter Ihrem Projekt betrachtet.Angenommen, Ihr Django-Projekt befindet sich
/usr/lib/python2.5/site-packages/projectname/
dann mit Ihren Einstellungen. Django sucht nach den Vorlagen unter/usr/lib/python2.5/site-packages/projectname/templates/
In diesem Fall möchten wir unsere Vorlagen so verschieben, dass sie wie folgt strukturiert sind:
Zweite Lösung :
Wenn das immer noch nicht funktioniert und vorausgesetzt, Sie haben die Apps in settings.py wie folgt konfiguriert:
Standardmäßig lädt Django die Vorlagen
templates/
unter allen installierten Apps im Verzeichnis. Mit Ihrer Verzeichnisstruktur möchten wir unsere Vorlagen so verschieben, dass sie folgendermaßen aussehen:SETTINGS_PATH
ist möglicherweise nicht standardmäßig definiert. In diesem Fall möchten Sie es definieren (in settings.py):quelle
/usr/lib/python2.5/site-packages/projectname/
?templates
ist kein gutes Design , jede Vorlage aus verschiedenen Apps in einem Verzeichnis abzulegen. Aber, wie ich weiß, nach der ZugabeAPP_NAME
in dersettings.py
,django
vielleicht geht die App-Vorlage unter dem Verzeichnis zu suchen , die unter dem istAPP_DIR
. So können Sie die Vorlage für verschiedene Apps trennen. (Django 1.7 - .1.9Finden Sie dieses Tupel:
Sie müssen die Zeichenfolge zu 'DIRS' hinzufügen
Insgesamt brauchen Sie also:
quelle
SETTINGS_PATH
ist eigentlich nirgendwo definiert, daher denke ich nicht, dass diese Antwort funktionieren wird. Vielleicht meinten SieBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, nicht DateiWenn Sie auf dieses Problem stoßen, wenn Sie ein
app
von Grund auf neu hinzufügen . Es ist wahrscheinlich, weil Sie einige vermissensettings
. Beim Hinzufügen eines sind drei Schritte erforderlichapp
.1 、 Erstellen Sie das Verzeichnis und die Vorlagendatei.
Angenommen, Sie haben ein Projekt mit dem Namen
mysite
und möchten einapp
benanntes hinzufügenyour_app_name
. Fügen Sie Ihre Vorlagendateimysite/your_app_name/templates/your_app_name
wie folgt ein.2 、 Fügen Sie Ihre
app
zuINSTALLED_APPS
.Ändern
settings.py
3 、 Fügen Sie Ihr
app
Verzeichnis zuDIRS
in hinzuTEMPLATES
.Ändern
settings.py
.quelle
Bei der Festlegung von Py entfernen TEMPLATE_LOADERS und TEMPLATE DIRS Dann ADD
quelle
Ich hatte ein peinliches Problem ...
Ich habe diesen Fehler erhalten, weil ich mich beeilt habe und vergessen habe, die App einzulegen
INSTALLED_APPS
. Sie würden denken, Django würde einen aussagekräftigeren Fehler auslösen.quelle
Nur eine Vermutung, aber lesen Sie diesen Artikel über das Laden von Django-Vorlagen .
django.template.loaders.app_directories.Loader
Stellen Sie insbesondere sicher, dass Sie in Ihrer TEMPLATE_LOADERS-Liste haben.quelle
Überprüfen Sie die Berechtigungen für Vorlagen und Appname-Verzeichnisse, entweder mit ls -l, oder versuchen Sie, einen absoluten Pfad open () von django aus zu erstellen.
quelle
Es funktioniert jetzt, nachdem ich es versucht habe
Es ist komisch. Ich muss dies nicht auf dem Remote-Server tun, damit es funktioniert.
Außerdem muss ich den folgenden Befehl auf dem lokalen Computer ausführen, um auf alle statischen Dateien zugreifen zu können, aber auf dem Remote-Server sind sie alle "root: root".
Der lokale Computer läuft unter Ubuntu 8.04 Desktop Edition. Der Remote-Server ist auf Ubuntu 9.04 Server Edition.
Weiß jemand warum?
quelle
Für die Django-Version 1.9 habe ich hinzugefügt
Zeile zum Vorlagenblock in settings.py Und es hat gut funktioniert
quelle
Django-
TemplateDoesNotExist
Fehler bedeutet einfach, dass das Framework die Vorlagendatei nicht finden kann.Um die API zum Laden von Vorlagen verwenden zu können, müssen Sie dem Framework mitteilen, in dem Sie Ihre Vorlagen speichern. Der Ort, an dem Sie dies tun können, befindet sich in Ihrer Einstellungsdatei (
settings.py
)TEMPLATE_DIRS
. Standardmäßig ist es ein leeres Tupel, daher teilt diese Einstellung Djangos Mechanismus zum Laden von Vorlagen mit, wo nach Vorlagen gesucht werden soll.Wählen Sie ein Verzeichnis aus, in dem Sie Ihre Vorlagen speichern möchten, und fügen Sie es TEMPLATE_DIRS hinzu, z.
quelle
Sehen Sie auf der Fehlerseite, welchen Ordner Django versucht, die Vorlage zu laden. Der
Template-loader postmortem
Fehler wird beispielsweise folgendermaßen angezeigt:In meinem Fehler
vcsrc\vcsrc\templates\base.html
nicht im Weg.Ändern Sie dann
TEMPLATES
insetting.py
Datei auf Ihren Vorlagen Pfadquelle
Ich muss Vorlagen für eine interne App verwenden und es funktioniert für mich:
quelle
Überprüfen Sie, ob sich Ihre templates.html im
/usr/lib/python2.5/site-packages/projectname/templates
Verzeichnis befinden.quelle
Hallo Leute, ich habe eine neue Lösung gefunden. Tatsächlich ist es in einer anderen Vorlage definiert. Anstatt TEMPLATE_DIRS selbst zu definieren, setzen Sie Ihren Verzeichnispfadnamen auf Folgendes:
quelle
Es ist mir peinlich, das zuzugeben, aber das Problem für mich war, dass eine Vorlage als
….hml
anstelle von angegeben wurde….html
. Achtung!quelle
Ich habe das hinzugefügt
und es zeigte immer noch den Fehler an, dann stellte ich fest, dass in einem anderen Projekt die Vorlagen angezeigt wurden, ohne diesen Code in der Datei settings.py hinzuzufügen, also überprüfte ich dieses Projekt und stellte fest, dass ich in diesem Projekt keine virtuelle Umgebung erstellt habe
und es hat funktioniert, weiß nicht warum
quelle
Ich habe mir dieses Problem ausgedacht. So habe ich das gelöst:
Sehen Sie sich Ihre settings.py an
TEMPLATES
, suchen Sie die Variable in den TEMPLATES und fügen Sie Ihren Vorlagenpfad in dieDIRS
Liste ein. Für mich setze ich zuerst meinen Vorlagenpfad alsTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
und füge ihn dannTEMPLATES_PATH
in dieDIRS
Liste ein'DIRS':[TEMPLATES_PATH,]
. Starten Sie dann den Server neu. Die TemplateDoesNotExist-Ausnahme ist nicht mehr vorhanden. Das ist es.quelle
in Ihrer
setting.py
DateiDIRS
imTEMPLATES
Array durch dieses ersetzendazu
Aber ich denke, du musst wissen, dass du einen Ordner mit Namen
templates
erstellen musst und er sollte sich im Stammpfad befinden, sonst musst du denDIRS
Wert ändernquelle
1.Erstellen Sie einen Ordner 'Vorlagen' in Ihrer 'App' (sagen wir, Sie haben Ihre App so benannt) und Sie können die HTML-Datei hier ablegen. Es wird jedoch dringend empfohlen, einen Ordner mit demselben Namen ('app') im Ordner 'templates' zu erstellen und erst dann htmls dort abzulegen. In den Ordner 'app / templates / app'
2.nun in 'url' 's urls.py setzen:
3. in den Ansichten der App.py setzen:
quelle
project-name/app-namme/settings.py
Stellen Sie sicher, dass Sie Ihre App zu INSTALLED_APPS hinzugefügt haben : .Und auf
project-name/app-namme/settings.py
VORLAGEN : .quelle