Flasche sieht keine Änderung in .js-Datei

Ich habe eine Änderung an einer der .js Dateien gemacht, die ich verwende und egal was ich tue, die Flasche besteht darauf, abholen zu lassen, aus dem Speicher-Cache, der letzten Version der Datei, ohne die Änderung.

Um zu klären, habe ich die folgende Struktur. Alles beginnt mit foo.html

 return render_template foo.html 

foo.html hat ein Formular innen, das den Flasche mit einigen Daten anruft und dann eine zweite Schablonenleiste bar.html :

 return render_template bar.html 

Diese zweite Vorlage ruft einige .js Datei auf, die in den static Ordner platziert wird, aber es wird nicht aktualisiert, wenn sich der Code ändert.

Ich erwähne die Struktur oben, denn wenn die .js Datei auf foo.html statt bar.html dann würde Flask die neuen Änderungen auf der Datei abholen. Aber in bar.html Flasche völlig ignoriert sie.

Was ist los?

Das einzige, was gearbeitet hat, war, auf "Cache deaktivieren" im Browser zu klicken und neu zu laden.

2 Solutions collect form web for “Flasche sieht keine Änderung in .js-Datei”

Letztlich ist dies ein frustrierendes Browser-Cache-Problem, das gelöst werden kann, indem man den Browser dazu zwingt, eine "harte Auffrischung" zu machen, die ein Browser / OS-abhängiger Tastendruck sein wird, aber das funktioniert in der Regel:

  • Windows: Strg + F5
  • Mac: Cmnd + R.

Es gibt noch andere Dateinamen Tricks, die man verwenden kann, um dieses Problem zu vermeiden (in den Kommentaren des OP erwähnt). Diese sind besonders wichtig in der Produktion, wo man keine Kontrolle über das Browser-Verhalten hat.

Bei nicht-statischen cache_control.max_age können Sie die Eigenschaft cache_control.max_age , die dem Browser mitteilen soll, wann die Antwort abgelaufen ist, wenn sie zwischengespeichert wird. Zum Beispiel, wenn Sie einen Flaschen-XHR-Endpunkt haben, der JSON-Daten zurückgibt, können Sie dies tun:

 @app.route('/_get_ajax_data/') def get_ajax_data(): data = {"hello": "world"} response = jsonify(data) response.cache_control.max_age = 60 * 60 * 24 // 1 day (in seconds) return response 

Sie können typischerweise auch Standardwerte in Ihrer Produktionswebserverkonfiguration für bestimmte Ressourcentypen festlegen (zB CSS / JS / HTML / JSON / etc)

Wenn Sie Ihre statischen Assets mit Flask bedienen (dies ist normalerweise der Fall in einer Entwicklungsumgebung), dann müssen Sie möglicherweise den SEND_FILE_MAX_AGE_DEFAULT Konfigurationswert setzen :

Standard-Cache-Steuerelement max Alter, um mit send_static_file() (die standardmäßige statische Datei Handler) und send_file() , als datetime.timedelta oder als Sekunden verwenden. Überschreiben Sie diesen Wert auf einer get_send_file_max_age() mit dem get_send_file_max_age() auf Flasche bzw. Blueprint. Voreinstellung auf 43200 (12 Stunden).

Das Lösen kann so einfach sein wie die Aktualisierung des app.config Wörterbuchs, wie app.config :

 app = Flask(__name__) ... app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 

Wenn du das machst, wird dein Browser keine statischen Assets zwischenspeichern, die von Flask bedient werden.

  • Wie kann ich eine Spalte im Bearbeitungsformular mit Flask-Admin ModelView filtern?
  • @login_required Schwierigkeiten in der Flasche app
  • Flasche-RESTful - Bild hochladen
  • Flask-Login hebt TypeError: 'bool' Objekt ist beim Aufrufen der is_active-Eigenschaft nicht abrufbar
  • Flask-login AttributeError: 'User' Objekt hat kein Attribut 'is_active'
  • Wie benutzt man QuerySelectField im Kolben?
  • Flask-admin Inline-Modellierung übergeben Form Argumente wirft AttributeError
  • Anpassen (Override) Flask-Admin's Submit-Methode aus der Bearbeitungssicht
  • Flasche und flask_login - organisierungscode
  • Wie fügt man Felder URL für verschachtelte Ausgabefelder in der Klappe auf
  • Wie kann man Flaschenerweiterungen manuell installieren?
  • Python ist die beste Programmiersprache der Welt.