Vous devez créer vos fichiers de modèle à l'emplacement correct; dans le templates
sous - répertoire à côté de votre module python.
L'erreur indique qu'il n'y a pas de home.html
fichier dans le templates/
répertoire. Assurez-vous que vous avez créé ce répertoire dans le même répertoire que votre module python, et que vous avez en fait placé un home.html
fichier dans ce sous-répertoire. Si votre application est un package, le dossier des modèles doit être créé à l' intérieur du package.
myproject/
app.py
templates/
home.html
myproject/
mypackage/
__init__.py
templates/
home.html
Sinon, si vous avez nommé votre dossier de modèles autrement que templates
et que vous ne souhaitez pas le renommer par défaut, vous pouvez indiquer à Flask d'utiliser cet autre répertoire.
app = Flask(__name__, template_folder='template') # still relative to module
Vous pouvez demander à Flask d'expliquer comment il a essayé de trouver un modèle donné, en définissant l' EXPLAIN_TEMPLATE_LOADING
option sur True
. Pour chaque modèle chargé, vous obtiendrez un rapport enregistré dans le Flaskapp.logger
, au niveau INFO
.
Voici à quoi cela ressemble lorsqu'une recherche est réussie; dans cet exemple, le foo/bar.html
modèle étend le base.html
modèle, il y a donc deux recherches:
[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')
Les Blueprints peuvent également enregistrer leurs propres répertoires de modèles , mais ce n'est pas obligatoire si vous utilisez des Blueprints pour faciliter la division d'un projet plus important en unités logiques. Le répertoire principal du modèle d'application Flask est toujours recherché en premier, même lorsque vous utilisez des chemins supplémentaires par plan.
template_folder
chemin par Blueprint .EXPLAIN_TEMPLATE_LOADING
été ajouté après que cette réponse ait été initialement écrite../Templates/index.html
, mais quand je déploie sur heroku (je pensais que c'était le même Python, les mêmes versions de bibliothèque, y compris la même version de Flask; mais heroku est Unix); et jette uneTemplateNotFound
erreur; après avoir renommé le dossiergit mv Templates/index.html templates/index.html
, les versions locale (Windows) et heroku (Unix) ont fonctionnéTemplates
==templates
. Mais Heroku exécute Linux, avec un système de fichiers sensible à la casse.Je pense que Flask utilise les modèles de répertoire par défaut. Donc, votre code devrait être supposé que c'est votre hello.py
Et vous travaillez la structure de l'espace comme
vous devez également créer deux fichiers html avec le nom de home.html et about.html et mettre ces fichiers dans le dossier de modèle.
la source
(Veuillez noter que la réponse acceptée ci-dessus fournie pour la structure du fichier / projet est absolument correcte.)
Aussi..
En plus de configurer correctement la structure des fichiers du projet, nous devons dire à flask de chercher au niveau approprié de la hiérarchie des répertoires.
par exemple..
Commencer par
../
déplace un répertoire vers l'arrière et commence là.Commencer par
../../
déplace deux répertoires vers l'arrière et commence là (et ainsi de suite ...).J'espère que cela t'aides
la source
Je ne sais pas pourquoi, mais j'ai dû utiliser la structure de dossiers suivante à la place. J'ai mis des "modèles" d'un niveau plus haut.
Cela indique probablement une mauvaise configuration ailleurs, mais je ne pouvais pas comprendre ce que c'était et cela fonctionnait.
la source
Regarde ça:
templates
render_template
est relatif au répertoire des modèles (index.html
serait directement dans le répertoire des modèles,auth/login.html
serait sous le répertoire auth dans le répertoire des modèles.)Si cela ne fonctionne pas, activez le débogage (
app.debug = True
) qui peut vous aider à comprendre ce qui ne va pas.la source
Si vous exécutez votre code à partir d'un package installé, assurez-vous que les fichiers de modèle sont présents dans le répertoire
<python root>/lib/site-packages/your-package/templates
.Quelques détails:
Dans mon cas, j'essayais d'exécuter des exemples de projet flask_simple_ui et
jinja
je disais toujoursL'astuce était que l'exemple de programme importait le package installé
flask_simple_ui
. Etninja
être utilisé à l'intérieur de ce package utilise comme répertoire racine pour rechercher le chemin du package, dans mon cas...python/lib/site-packages/flask_simple_ui
, au lieu deos.getcwd()
ce à quoi on pourrait s'attendre.À ma malchance,
setup.py
a un bogue et ne copie aucun fichier html, y compris les fichiers manquantsform.html
. Une fois que j'ai résolusetup.py
, le problème avec TemplateNotFound disparu.J'espère que cela aide quelqu'un.
la source
J'ai eu la même erreur, mais la seule chose que j'ai mal faite a été de nommer mon dossier «templates», «template» sans «s». Après avoir changé cela, cela fonctionnait bien, je ne sais pas pourquoi c'est une chose mais c'est le cas.
la source
Lorsque la fonction render_template () est utilisée, elle essaie de rechercher un modèle dans le dossier appelé templates et renvoie l'erreur jinja2.exceptions.TemplateNotFound lorsque:
Résoudre le problème :
créez un dossier avec des modèles de nom dans le même répertoire où se trouve le fichier python et placez le fichier html créé dans le dossier des modèles.
la source
Vous devez placer tous vos
.html
fichiers dans le dossier de modèles à côté de votre module python. Et s'il y a des images que vous utilisez dans vos fichiers html, vous devez placer tous vos fichiers dans le dossier nommé staticDans la structure suivante
la source
Une autre alternative consiste à définir le
root_path
qui résout le problème à la fois pour les modèles et les dossiers statiques.Si vous effectuez le rendu des modèles directement via
Jinja2
, vous écrivez:la source