Por padrão, ao executar o aplicativo Flask usando o servidor integrado ( Flask.run
), ele monitora seus arquivos Python e recarrega automaticamente o aplicativo se seu código mudar:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
Infelizmente, isso parece funcionar apenas para arquivos * .py , e não consigo encontrar nenhuma maneira de estender essa funcionalidade a outros arquivos. Mais notavelmente, seria extremamente útil fazer o Flask reiniciar o aplicativo quando um modelo for alterado. Já perdi a conta de quantas vezes estava mexendo na marcação de modelos e ficando confuso por não ver nenhuma alteração, apenas para descobrir que o aplicativo ainda estava usando a versão antiga do modelo Jinja.
Então, existe uma maneira de ter os arquivos de monitoramento do Flask no diretório de modelos ou é necessário mergulhar no código-fonte do framework?
Editar : estou usando o Ubuntu 10.10. Não tentei isso em nenhuma outra plataforma realmente.
Após uma investigação mais aprofundada, descobri que as alterações nos modelos de fato são atualizadas em tempo real, sem recarregar o próprio aplicativo. No entanto, isso parece se aplicar apenas aos modelos que são passados para flask.render_template
.
Mas acontece que, em meu aplicativo, tenho muitos componentes parametrizados reutilizáveis que uso em modelos Jinja. Eles são implementados como programas {% macro %}
, residem em "módulos" dedicados e são {% import %}
editados em páginas reais. Tudo bom e SECO ... exceto que esses modelos importados aparentemente nunca são verificados quanto a modificações, já que eles não passam de forma render_template
alguma.
(Curiosamente, isso não acontece com modelos invocados {% extends %}
. Quanto a {% include %}
, não tenho ideia, pois realmente não os uso.)
Então, para finalizar, as raízes desse fenômeno parecem estar em algum lugar entre Jinja e Flask ou Werkzeug. Eu acho que pode justificar uma viagem ao bug tracker para qualquer um desses projetos :) Enquanto isso, aceitei o jd. é a resposta porque essa é a solução que eu realmente usei - e funciona perfeitamente.