De forma predeterminada, cuando se ejecuta la aplicación Flask usando el servidor integrado ( Flask.run
), monitorea sus archivos Python y recarga automáticamente la aplicación si cambia su código:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
Desafortunadamente, esto parece funcionar solo para archivos * .py , y no parece encontrar ninguna forma de extender esta funcionalidad a otros archivos. En particular, sería extremadamente útil que Flask reiniciara la aplicación cuando cambia una plantilla . Perdí la cuenta de cuántas veces estaba jugando con el marcado en las plantillas y me confundía al no ver ningún cambio, solo para descubrir que la aplicación todavía usaba la versión anterior de la plantilla Jinja.
Entonces, ¿hay alguna manera de hacer que Flask supervise los archivos en el directorio de plantillas o es necesario sumergirse en la fuente del marco?
Editar : estoy usando Ubuntu 10.10. Realmente no lo he probado en ninguna otra plataforma.
Después de investigar más, descubrí que los cambios en las plantillas se actualizan en tiempo real, sin tener que volver a cargar la aplicación. Sin embargo, esto parece aplicarse solo a las plantillas a las que se pasa flask.render_template
.
Pero sucede que en mi aplicación, tengo bastantes componentes reutilizables y parametrizados que utilizo en las plantillas de Jinja. Se implementan como {% macro %}
s, residen en "módulos" dedicados y se {% import %}
editan en páginas reales. Todo agradable y SECO ... excepto que esas plantillas importadas aparentemente nunca se revisan para detectar modificaciones, ya que no pasan render_template
en absoluto.
(Curiosamente, esto no sucede con las plantillas invocadas mediante {% extends %}
. En cuanto a {% include %}
, no tengo ni idea, ya que realmente no las uso).
Entonces, para terminar, las raíces de este fenómeno parecen estar en algún lugar entre Jinja y Flask o Werkzeug. Supongo que puede justificar un viaje al rastreador de errores para cualquiera de esos proyectos :) Mientras tanto, he aceptado el jd. La respuesta es porque esa es la solución que realmente utilicé, y funciona como un encanto.
Respuestas:
En mi experiencia, las plantillas ni siquiera necesitan que la aplicación se reinicie para actualizarse, ya que deben cargarse desde el disco cada vez que
render_template()
se llama. Sin embargo, quizás sus plantillas se usen de manera diferente.Para recargar su aplicación cuando cambien las plantillas (o cualquier otro archivo), puede pasar el
extra_files
argumento aFlask().run()
una colección de nombres de archivos para observar: cualquier cambio en esos archivos activará el recargador.Ejemplo:
Ver aquí: http://werkzeug.pocoo.org/docs/0.10/serving/?highlight=run_simple#werkzeug.serving.run_simple
fuente
Flask.run
que conduce a los documentos de Werkzeug. Pero esta opción en particular parece lo suficientemente útil como para que al menos se la mencione en los documentos de Flask.No such file or directory
, intente usar la ruta relativa como en:extra_dirs = ['./directory/to/watch',]
path
es, lo esos.path
. pensé que valía la pena mencionarloflask run
desde la línea de comandos?puedes usar
De http://flask.pocoo.org/docs/1.0/config/
fuente
app.config['TEMPLATES_AUTO_RELOAD'] = True
, y por alguna razón esperaba ver que el servidor se reiniciara automáticamente cuando cambiaba una plantilla, como ocurre en el modo de depuración. No se reinicia, pero SÍ actualiza la plantilla que renderiza.Cuando trabaja con
jinja
plantillas, necesita establecer algunos parámetros. En mi caso con python3, lo resolví con el siguiente código:fuente
Para mí funciona muy bien:
Más información en http://flask.pocoo.org/docs/1.0/config/
fuente
En realidad para mí
TEMPLATES_AUTO_RELOAD = True
no funciona (versión 0.12). Yo uso jinja2 y lo que he hecho:Crear función
before_request
Regístrese en la aplicación
Eso es.
fuente
Lo que funcionó para mí es simplemente agregar esto:
( tomado de la respuesta de @ dikkini )
fuente
Usando la última versión de Flask en Windows, usando el comando run y debug establecido en true; No es necesario restablecer el frasco para que los cambios en las plantillas surtan efecto. Pruebe Shift + F5 (o Shift más el botón de recarga) para asegurarse de que no se esté almacenando en caché.
fuente
Consulte http://flask.pocoo.org/docs/1.0/quickstart/ y utilice
FLASK_ENV=development
fuente
Actualizado a junio de 2019:
La CLI del matraz se recomienda sobre app.run () para ejecutar un servidor de desarrollo, por lo que si queremos usar la CLI, no se puede usar la solución aceptada.
El uso de la versión de desarrollo de Flask (1.1) al momento de escribir este artículo nos permite configurar una variable de entorno FLASK_RUN_EXTRA_FILES que efectivamente hace lo mismo que la respuesta aceptada.
Vea este problema de github .
Uso de ejemplo:
en Linux. Para especificar varios archivos adicionales, separe las rutas de archivo con dos puntos. , p.ej
La CLI también admite un
--extra-files
argumento a partir del Flask 1.1.fuente
Las plantillas se recargan automáticamente, por qué no
ctrl+f5
actualizar la página web, ya que los navegadores web suelen guardar caché.fuente