Par défaut, lors de l'exécution d'une application Flask à l'aide du serveur intégré ( Flask.run
), il surveille ses fichiers Python et recharge automatiquement l'application si son code est modifié :
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
Malheureusement, cela semble fonctionner pour *.py et je n'ai pas trouvé de moyen d'étendre cette fonctionnalité à d'autres fichiers. Plus particulièrement, il serait extrêmement utile que Flask redémarre l'application lorsqu'un fichier modèle changements. J'ai perdu le compte du nombre de fois où j'ai manipulé des balises dans des modèles et où j'ai été confus de ne voir aucun changement, pour finalement découvrir que l'application utilisait toujours l'ancienne version du modèle Jinja.
Existe-t-il donc un moyen de faire en sorte que Flask surveille les fichiers dans modèles ou faut-il plonger dans les sources du framework ?
Editer : J'utilise Ubuntu 10.10. Je n'ai pas vraiment essayé sur d'autres plateformes.
Après une enquête plus approfondie, j'ai découvert que les modifications apportées aux modèles sont en effet sont mis à jour en temps réel, sans avoir à recharger l'application elle-même. Cependant, cela ne semble s'appliquer qu'aux modèles qui sont passés à la fonction flask.render_template
.
Mais il se trouve que dans mon application, j'ai pas mal de composants réutilisables et paramétrés que j'utilise dans les modèles Jinja. Ils sont implémentés en tant que {% macro %}
s, résident dans des "modules" dédiés et sont {% import %}
ées en pages réelles. Tout cela est très bien, mais les modèles importés ne sont apparemment jamais vérifiés pour des modifications, puisqu'ils ne passent pas par l'option render_template
du tout.
(Curieusement, cela ne se produit pas pour les modèles invoqués par l'intermédiaire de {% extends %}
. Quant à {% include %}
Je n'en ai aucune idée car je ne les utilise pas vraiment.)
Pour conclure, les racines de ce phénomène semblent se situer quelque part entre Jinja et Flask ou Werkzeug. Je pense que cela peut justifier un voyage dans le bug tracker de l'un ou l'autre de ces projets :) En attendant, j'ai accepté le jd. car c'est la solution que j'ai utilisée - et elle fonctionne à merveille.