Debe crear sus archivos de plantilla en la ubicación correcta; en el templates
subdirectorio junto a su módulo de Python.
El error indica que no hay ningún home.html
archivo en el templates/
directorio. Asegúrese de haber creado ese directorio en el mismo directorio que su módulo de Python, y de haber puesto un home.html
archivo en ese subdirectorio. Si su aplicación es un paquete, la carpeta de plantillas debe crearse dentro del paquete.
myproject/
app.py
templates/
home.html
myproject/
mypackage/
__init__.py
templates/
home.html
Alternativamente, si nombró a su carpeta de plantillas de otro modo templates
y no desea cambiarle el nombre predeterminado, puede decirle a Flask que use ese otro directorio.
app = Flask(__name__, template_folder='template') # still relative to module
Puede pedirle a Flask que le explique cómo intentó encontrar una plantilla determinada, estableciendo la EXPLAIN_TEMPLATE_LOADING
opción en True
. Por cada plantilla cargada, obtendrá un informe registrado en el matrazapp.logger
, a nivel INFO
.
Así es como se ve cuando una búsqueda tiene éxito; en este ejemplo, la foo/bar.html
plantilla amplía la base.html
plantilla, por lo que hay dos búsquedas:
[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')
Los blueprints también pueden registrar sus propios directorios de plantillas , pero esto no es un requisito si está utilizando blueprints para facilitar la división de un proyecto más grande en unidades lógicas. El directorio principal de plantillas de la aplicación Flask siempre se busca primero incluso cuando se utilizan rutas adicionales por plano.
template_folder
ruta por blueprint .EXPLAIN_TEMPLATE_LOADING
se agregó después de que esta respuesta se escribió inicialmente../Templates/index.html
, pero cuando lo implemento en heroku (pensé que era el mismo Python, las mismas versiones de biblioteca, incluida la misma versión de Flask; pero heroku es Unix); y arrojaTemplateNotFound
error; después de cambiar el nombre de la carpetagit mv Templates/index.html templates/index.html
, las versiones local (Windows) y heroku (Unix) funcionaronTemplates
==templates
. Pero Heroku ejecuta Linux, con un sistema de archivos sensible a mayúsculas y minúsculas.Creo que Flask usa las plantillas de directorio por defecto. Entonces su código debería ser suponer que este es su hello.py
Y trabajas la estructura del espacio como
también ha creado dos archivos html con el nombre de home.html y about.html y los ha puesto en la carpeta de plantillas.
fuente
(Tenga en cuenta que la respuesta aceptada anteriormente proporcionada para la estructura del archivo / proyecto es absolutamente correcta).
También..
Además de configurar correctamente la estructura de archivos del proyecto, tenemos que decirle a flask que busque en el nivel apropiado de la jerarquía de directorios.
por ejemplo..
Comenzar con
../
mueve un directorio hacia atrás y comienza allí.Comenzar con
../../
mueve dos directorios hacia atrás y comienza allí (y así sucesivamente ...).Espero que esto ayude
fuente
No sé por qué, pero tuve que usar la siguiente estructura de carpetas. Pongo "plantillas" un nivel arriba.
Esto probablemente indica una mala configuración en otro lugar, pero no pude averiguar qué era y funcionó.
fuente
Mira esto:
templates
render_template
es relativo al directorio de plantillas (index.html
estaría directamente en el directorio de plantillas,auth/login.html
estaría bajo el directorio de autenticación en el directorio de plantillas).Si eso no funciona, active la depuración (
app.debug = True
) que podría ayudar a descubrir qué está mal.fuente
Si ejecuta su código desde un paquete instalado, asegúrese de que los archivos de plantilla estén presentes en el directorio
<python root>/lib/site-packages/your-package/templates
.Algunos detalles:
En mi caso, estaba tratando de ejecutar ejemplos del proyecto flask_simple_ui y
jinja
siempre decíaEl truco era que el programa de muestra importaría el paquete instalado
flask_simple_ui
. Yninja
se usa desde el interior de ese paquete como directorio raíz para buscar la ruta del paquete, en mi caso...python/lib/site-packages/flask_simple_ui
, en lugar deos.getcwd()
lo que cabría esperar.Para mi mala suerte,
setup.py
tiene un error y no copia ningún archivo html, incluido el que faltaform.html
. Una vez que lo solucionésetup.py
, el problema con TemplateNotFound desapareció.Espero que esto ayude a alguien.
fuente
Tuve el mismo error y resultó que lo único que hice mal fue nombrar mi carpeta 'plantillas', 'plantilla' sin 's'. Después de cambiar que funcionó bien, no sé por qué es una cosa, pero lo es.
fuente
Cuando se usa la función render_template (), intenta buscar una plantilla en la carpeta llamada templates y arroja el error jinja2.exceptions.TemplateNotFound cuando:
Para resolver el problema :
cree una carpeta con plantillas de nombres en el mismo directorio donde se encuentra el archivo python y coloque el archivo html creado en la carpeta de plantillas.
fuente
Debe colocar todos sus
.html
archivos en la carpeta de plantillas junto a su módulo de Python. Y si hay imágenes que está utilizando en sus archivos html, entonces debe poner todos sus archivos en la carpeta llamada staticEn la siguiente estructura
fuente
Otra alternativa es configurar el
root_path
que soluciona el problema tanto para las plantillas como para las carpetas estáticas.Si renderiza plantillas directamente a través de
Jinja2
, entonces escribe:fuente