Wenn die Flask-Anwendung mit dem integrierten Server ( Flask.run
) ausgeführt wird, überwacht sie standardmäßig ihre Python-Dateien und lädt die App automatisch neu, wenn sich ihr Code ändert:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
Leider scheint dies nur für * .py- Dateien zu funktionieren , und ich finde anscheinend keine Möglichkeit, diese Funktionalität auf andere Dateien auszudehnen. Vor allem wäre es äußerst nützlich, wenn Flask die App neu startet, wenn sich eine Vorlage ändert. Ich habe die Zählung verloren, wie oft ich mit Markups in Vorlagen herumgespielt habe und verwirrt war, weil ich keine Änderungen gesehen habe, nur um herauszufinden, dass die App immer noch die alte Version der Jinja-Vorlage verwendet.
Gibt es eine Möglichkeit, Flask-Überwachungsdateien im Vorlagenverzeichnis zu haben , oder muss in die Quelle des Frameworks eingetaucht werden?
Edit : Ich benutze Ubuntu 10.10. Ich habe das auf keiner anderen Plattform wirklich versucht.
Nach einer weiteren Untersuchung habe ich , dass Änderungen in Vorlagen in der Tat entdeckt werden in Echtzeit aktualisiert werden , ohne erneutes Laden der App selbst. Dies scheint jedoch nur für die Vorlagen zu gelten, an die übergeben wird flask.render_template
.
Es kommt jedoch vor, dass ich in meiner App viele wiederverwendbare, parametrisierte Komponenten habe, die ich in Jinja-Vorlagen verwende. Sie sind als {% macro %}
s implementiert , befinden sich in dedizierten "Modulen" und werden {% import %}
in tatsächliche Seiten eingeteilt. Alles schön und trocken ... außer dass diese importierten Vorlagen anscheinend nie auf Änderungen überprüft werden, da sie überhaupt nicht durchlaufen werden render_template
.
(Merkwürdigerweise geschieht dies nicht für Vorlagen aufgerufen durch {% extends %}
. Was{% include %}
Ich habe keine Ahnung, da ich sie nicht wirklich verwende.)
Zum Abschluss scheinen die Wurzeln dieses Phänomens irgendwo zwischen Jinja und Flask oder Werkzeug zu liegen. Ich denke, es könnte eine Reise zum Bug-Tracker für eines dieser Projekte rechtfertigen :) In der Zwischenzeit habe ich die JD akzeptiert . Die Antwort, denn das ist die Lösung, die ich tatsächlich verwendet habe - und sie funktioniert wie ein Zauber.
Antworten:
Nach meiner Erfahrung muss die Anwendung für Vorlagen nicht einmal neu gestartet werden, um aktualisiert zu werden, da sie jedes Mal von der Festplatte geladen werden sollten
render_template()
. Möglicherweise werden Ihre Vorlagen jedoch anders verwendet.Um Ihre Anwendung neu zu laden, wenn sich die Vorlagen ändern (oder eine andere Datei), können Sie das
extra_files
Argument an übergebenFlask().run()
eine Sammlung von zu beobachtenden Dateinamen übergeben: Jede Änderung an diesen Dateien löst den Neuladen aus.Beispiel:
Siehe hier: http://werkzeug.pocoo.org/docs/0.10/serving/?highlight=run_simple#werkzeug.serving.run_simple
quelle
Flask.run
zu Werkzeug-Dokumenten führte. Diese spezielle Option scheint jedoch nützlich genug zu sein, um sie zumindest in Flask-Dokumenten zu erwähnen.No such file or directory
, versuchen Sie, den relativen Pfad wie folgt zu verwenden:extra_dirs = ['./directory/to/watch',]
path
ist, ist esos.path
. dachte, es wäre erwähnenswertflask run
über die Befehlszeile ausgeführt werden?Sie können verwenden
Von http://flask.pocoo.org/docs/1.0/config/
quelle
app.config['TEMPLATES_AUTO_RELOAD'] = True
und aus irgendeinem Grund erwartet, dass der Server automatisch neu gestartet wird, wenn sich eine Vorlage ändert, wie dies im Debug-Modus der Fall ist. Es wird nicht neu gestartet, aber es aktualisiert die Vorlage, die es rendert.Wenn Sie mit
jinja
Vorlagen arbeiten, müssen Sie einige Parameter festlegen. In meinem Fall mit Python3 habe ich es mit dem folgenden Code gelöst:quelle
Bei mir funktioniert das ganz gut:
Weitere Informationen finden Sie unter http://flask.pocoo.org/docs/1.0/config/.
quelle
Eigentlich
TEMPLATES_AUTO_RELOAD = True
funktioniert bei mir nicht (Version 0.12). Ich benutze jinja2 und was ich getan habe:Funktion erstellen
before_request
Registrieren Sie es in der Anwendung
Das ist es.
quelle
Was für mich funktioniert hat, ist nur Folgendes hinzuzufügen:
( entnommen aus @ dikkinis Antwort )
quelle
Verwenden der neuesten Version von Flask unter Windows, Verwenden des Befehls run und Debuggen auf true. Flask muss nicht zurückgesetzt werden, damit Änderungen an Vorlagen wirksam werden. Versuchen Sie Shift + F5 (oder Shift plus die Reload-Taste), um sicherzustellen, dass nichts zwischengespeichert wird.
quelle
Siehe http://flask.pocoo.org/docs/1.0/quickstart/ und verwenden
FLASK_ENV=development
quelle
Aktualisiert ab Juni 2019:
Die Kolben-CLI Flask- wird über app.run () zum Ausführen eines Entwicklungsservers empfohlen. Wenn wir also die CLI verwenden möchten, kann die akzeptierte Lösung nicht verwendet werden.
Die Verwendung der Entwicklungsversion von Flask (1.1) zum jetzigen Zeitpunkt ermöglicht es uns, eine Umgebungsvariable FLASK_RUN_EXTRA_FILES festzulegen, die effektiv dasselbe tut wie die akzeptierte Antwort.
Siehe dieses Github-Problem .
Anwendungsbeispiel:
unter Linux. Um mehrere zusätzliche Dateien anzugeben, trennen Sie die Dateipfade durch Doppelpunkte. , z.B
Die CLI unterstützt auch ein
--extra-files
Argument ab Flask 1.1.quelle
Vorlagen werden automatisch neu geladen. Warum nicht
ctrl+f5
die Webseite aktualisieren, da Webbrowser normalerweise den Cache speichern.quelle