Ricarica l’app Flask quando il file del modello cambia

| | | |

Per impostazione predefinita, quando esegue l'applicazione Flask utilizzando il server integrato (Flask.run), monitora i suoi file Python e ricarica automaticamente l'app se il suo codice cambia:

* Modifica rilevata in "/home/xion/hello-world/app.py", ricarica * Riavvio con reloader 

Purtroppo sembra funzionare per * .py solo e non mi sembra di trovare alcun modo per estendere questa funzionalità ad altri file. In particolare, sarebbe estremamente utile fare in modo che Flask riavvii l'app quando un modello > modifiche. Ho perso il conto di quante volte stavo armeggiando con il markup nei modelli e mi sono confuso non vedendo alcuna modifica, solo per scoprire che l'app stava ancora utilizzando la vecchia versione del modello Jinja.

Quindi, c'è un modo per avere i file di monitoraggio di Flask nella directory templates o è necessario immergersi nel sorgente del framework?

Modifica: Sto usando Ubuntu 10.10. Non l'ho mai provato su altre piattaforme.


Dopo ulteriori indagini, ho scoperto che le modifiche ai modelli vengono aggiornate in tempo reale, senza ricaricare l'app stesso. Tuttavia, questo sembra applicarsi solo a quei modelli che vengono passati a flask.render_template.

Ma succede che nella mia app ho un bel po' di riutilizzabili , componenti parametrizzati che utilizzo nei modelli Jinja. Sono implementati come {% macro %}s, risiedono in "moduli" dedicati e sono {% import %}ed in pagine reali. Tutti belli e ASCIUTTI... tranne per il fatto che i modelli importati apparentemente non vengono mai controllati per le modifiche, poiché non passano affatto attraverso render_template.

(Curiosamente, questo non accade per i modelli invocati tramite {% extends %}. Per quanto riguarda {% include %}, non ne ho idea perché non li uso davvero. )

Quindi, per concludere, le radici di questo fenomeno sembrano essere da qualche parte scommesse tra Jinja e Flask o Werkzeug. Immagino che possa giustificare un viaggio nel bug tracker per uno di questi progetti :) Nel frattempo, ho accettato la risposta di jd. perché questa è la soluzione che ho effettivamente usato - e funziona come un fascino.