По умолчанию при запуске приложения Flask с использованием встроенного server ( Flask.run
) он отслеживает свои файлы Python и автоматически перезагружает приложение, если его код изменяется:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
К сожалению, похоже, что это работает только для файлов * .py , и я, похоже, не нахожу способа расширить эту функциональность на другие файлы. В частности, было бы чрезвычайно полезно перезапустить приложение Flask при изменении шаблона . Я потерял счет, сколько раз возился с разметкой в шаблонах и сбивался с толку, не видя никаких изменений, только чтобы узнать, что приложение все еще использует старую версию шаблона Jinja.
Итак, есть ли способ разместить файлы монитора Flask в каталоге шаблонов , или это требует погружения в исходный код фреймворка?
Изменить : я использую Ubuntu 10.10. На самом деле я не пробовал это ни на каких других платформах.
После дальнейших исследований, я обнаружил , что изменения в шаблонах действительно будут обновлены в режиме реального времени, без перезагрузки самого приложения. Однако, похоже, это применимо только к тем шаблонам, которые передаются flask.render_template
.
Но так уж получилось, что в моем приложении довольно много параметризованных компонентов многократного использования, которые я использую в шаблонах Jinja. Они реализованы как {% macro %}
s, находятся в выделенных «модулях» и {% import %}
превращаются в реальные страницы. Все красиво и СУХОЙ ... за исключением того, что эти импортированные шаблоны, по-видимому, никогда не проверяются на наличие изменений, поскольку они вообще не проходят render_template
.
(Любопытно, что этого не происходит с шаблонами, вызываемыми через {% extends %}
. Что касается {% include %}
, я понятия не имею, так как на самом деле я их не использую.)
Итак, корни этого явления, кажется, лежат где-то между Jinja и Flask или Werkzeug. Думаю, для любого из этих проектов может потребоваться поездка в систему отслеживания ошибок :) Тем временем я принял jd. ответ, потому что я действительно использовал это решение - и оно работает как шарм.