Per impostazione predefinita, quando si 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:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
Sfortunatamente, questo sembra funzionare solo per i file * .py e non mi sembra di trovare alcun modo per estendere questa funzionalità ad altri file. In particolare, sarebbe estremamente utile che Flask riavvii l'app quando un modello cambia. Ho perso il conto di quante volte stavo giocherellando con il markup nei modelli e mi sono confuso non vedendo alcuna modifica, solo per scoprire che l'app utilizzava ancora la vecchia versione del modello Jinja.
Quindi, c'è un modo per avere i file di monitoraggio di Flask nella directory dei modelli o è necessario immergersi nella fonte 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 effettivamente aggiornate in tempo reale, senza dover ricaricare l'app stessa. Tuttavia, questo sembra applicarsi solo a quei modelli a cui vengono passati flask.render_template
.
Ma succede che nella mia app ho molti componenti riutilizzabili e parametrizzati che uso nei modelli Jinja. Sono implementati come {% macro %}
s, risiedono in "moduli" dedicati e sono {% import %}
inseriti in pagine reali. Tutto bello e ASCIUTTO ... tranne per il fatto che quei modelli importati apparentemente non vengono mai controllati per eventuali modifiche, poiché non passano render_template
affatto.
(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 tra Jinja e Flask o Werkzeug. Immagino che possa giustificare un viaggio al bug tracker per uno di questi progetti :) Nel frattempo, ho accettato il jd. La risposta è perché questa è la soluzione che ho effettivamente usato e funziona a meraviglia.