Sie müssen Ihre Vorlagendateien am richtigen Speicherort erstellen. in demtemplates
Unterverzeichnis neben Ihrem Python-Modul.
Der Fehler zeigt an, dass sich keine home.html
Datei im templates/
Verzeichnis befindet. Stellen Sie sicher, dass Sie dieses Verzeichnis im selben Verzeichnis wie Ihr Python-Modul erstellt haben und dass Sie tatsächlich eine home.html
Datei in dieses Unterverzeichnis gestellt haben. Wenn Ihre App ein Paket ist, sollte der Vorlagenordner innerhalb des Pakets erstellt werden.
myproject/
app.py
templates/
home.html
myproject/
mypackage/
__init__.py
templates/
home.html
Wenn Sie Ihren Vorlagenordner anders benannt haben templates
und ihn nicht in den Standard umbenennen möchten, können Sie Flask alternativ anweisen, dieses andere Verzeichnis zu verwenden.
app = Flask(__name__, template_folder='template') # still relative to module
Sie können Flask bitten, zu erklären, wie versucht wurde, eine bestimmte Vorlage zu finden, indem Sie die EXPLAIN_TEMPLATE_LOADING
Option auf setzen True
. Für jede geladene Vorlage erhalten Sie einen Bericht, der auf Ebene der Flascheapp.logger
protokolliert wird INFO
.
So sieht es aus, wenn eine Suche erfolgreich ist. In diesem Beispiel erweitert die foo/bar.html
Vorlage die base.html
Vorlage, sodass zwei Suchvorgänge ausgeführt werden:
[2019-06-15 16:03:39,197] INFO in debughelpers: Locating template "foo/bar.html":
1: trying loader of application "flaskpackagename"
class: jinja2.loaders.FileSystemLoader
encoding: 'utf-8'
followlinks: False
searchpath:
- /.../project/flaskpackagename/templates
-> found ('/.../project/flaskpackagename/templates/foo/bar.html')
[2019-06-15 16:03:39,203] INFO in debughelpers: Locating template "base.html":
1: trying loader of application "flaskpackagename"
class: jinja2.loaders.FileSystemLoader
encoding: 'utf-8'
followlinks: False
searchpath:
- /.../project/flaskpackagename/templates
-> found ('/.../project/flaskpackagename/templates/base.html')
Blaupausen können auch ihre eigenen Vorlagenverzeichnisse registrieren. Dies ist jedoch nicht erforderlich, wenn Sie Blaupausen verwenden, um die Aufteilung eines größeren Projekts auf logische Einheiten zu vereinfachen. Das Hauptvorlagenverzeichnis der Flask-App wird immer zuerst durchsucht, auch wenn zusätzliche Pfade pro Blaupause verwendet werden.
template_folder
Pfad pro Blaupause festlegen .EXPLAIN_TEMPLATE_LOADING
wurde hinzugefügt, nachdem diese Antwort ursprünglich geschrieben wurde../Templates/index.html
, aber wenn ich sie auf Heroku bereitstelle (dachte, es wäre dasselbe Python, dieselben Bibliotheksversionen, einschließlich derselben Flaschenversion; aber Heroku ist Unix); und wirftTemplateNotFound
Fehler; Nachdem ich den Ordner umbenannt hattegit mv Templates/index.html templates/index.html
, funktionierten sowohl lokale (Windows) als auch Heroku (Unix) VersionenTemplates
==templates
. Aber Heroku läuft unter Linux mit einem Dateisystem, bei dem zwischen Groß- und Kleinschreibung unterschieden wird.Ich denke, Flask verwendet standardmäßig die Verzeichnisvorlagen. Ihr Code sollte also annehmen, dass dies Ihre hello.py ist
Und Sie arbeiten wie Raumstruktur
Außerdem haben Sie zwei HTML-Dateien mit dem Namen home.html und about.html erstellt und diese Dateien im Vorlagenordner abgelegt.
quelle
(Bitte beachten Sie, dass die oben akzeptierte Antwort für die Datei- / Projektstruktur absolut korrekt ist.)
Ebenfalls..
Zusätzlich zum ordnungsgemäßen Einrichten der Projektdateistruktur müssen wir flask anweisen, in der entsprechenden Ebene der Verzeichnishierarchie nachzuschauen.
beispielsweise..
Beginnen mit
../
Verschiebt ein Verzeichnis rückwärts und beginnt dort.Beginnend mit
../../
bewegt sich zwei Verzeichnisse rückwärts und beginnt dort (und so weiter ...).Hoffe das hilft
quelle
Ich weiß nicht warum, aber ich musste stattdessen die folgende Ordnerstruktur verwenden. Ich habe "Vorlagen" eine Ebene höher gestellt.
Dies deutet wahrscheinlich auf eine Fehlkonfiguration an anderer Stelle hin, aber ich konnte nicht herausfinden, was das war, und dies funktionierte.
quelle
Prüfe das:
templates
render_template
auf das Vorlagenverzeichnis (index.html
befindet sich direkt im Vorlagenverzeichnis,auth/login.html
befindet sich unter dem Auth-Verzeichnis im Vorlagenverzeichnis.)Wenn dies nicht funktioniert, aktivieren Sie debugging (
app.debug = True
), um herauszufinden, was falsch ist.quelle
Wenn die Funktion render_template () verwendet wird, wird versucht, im Ordner templates nach einer Vorlage zu suchen, und es wird der Fehler jinja2.exceptions.TemplateNotFound ausgelöst, wenn:
Um das Problem zu lösen :
Erstellen Sie einen Ordner mit Namensvorlagen in demselben Verzeichnis, in dem sich die Python-Datei befindet, und legen Sie die erstellte HTML-Datei im Vorlagenordner ab.
quelle
Wenn Sie Ihren Code von einem installierten Paket aus ausführen, stellen Sie sicher, dass Vorlagendateien im Verzeichnis vorhanden sind
<python root>/lib/site-packages/your-package/templates
.Ein paar Details:
In meinem Fall habe ich versucht, Beispiele für das Projekt flask_simple_ui auszuführen und
jinja
würde immer sagenDer Trick war, dass das Beispielprogramm das installierte Paket importieren würde
flask_simple_ui
. Undninja
aus verwendet wird innerhalb dieses Pakets als Stammverzeichnis wird mit dem Paketpfad für die Suche, in meinem Fall...python/lib/site-packages/flask_simple_ui
, stattos.getcwd()
als man erwarten würde.Zu meinem Pech
setup.py
hat ein Fehler und kopiert keine HTML-Dateien, einschließlich der fehlendenform.html
. Nachdem ichsetup.py
das Problem behoben hatte , verschwand das Problem mit TemplateNotFound .Ich hoffe es hilft jemandem.
quelle
Sie müssen alle Ihre
.html
Dateien im Vorlagenordner neben Ihrem Python-Modul ablegen. Und wenn es Bilder gibt, die Sie in Ihren HTML-Dateien verwenden, müssen Sie alle Ihre Dateien in den Ordner mit dem Namen static legenIn der folgenden Struktur
quelle
Ich hatte den gleichen Fehler. Das einzige, was ich falsch gemacht habe, war, meinen Ordner "Vorlagen" "Vorlage" ohne "s" zu nennen. Nachdem ich geändert habe, dass es gut funktioniert hat, weiß ich nicht, warum es eine Sache ist, aber es ist.
quelle
Eine andere Alternative besteht darin,
root_path
die festzulegen, mit der das Problem sowohl für Vorlagen als auch für statische Ordner behoben wird.Wenn Sie Vorlagen direkt über rendern
Jinja2
, schreiben Sie:quelle