Ich verwende Jinja2-Vorlagen mit Bottle.py und dem dev_appserver von Google App Engine zur Entwicklung. Ich möchte, dass die Vorlagen automatisch bei jeder Anfrage neu geladen werden (oder idealerweise nur, wenn sie sich ändern), so dass ich den Server nicht ständig neu starten muss.
Entsprechend den Flaschendokumenten sollten Sie das Zwischenspeichern von Vorlagen deaktivieren können, indem Sie bottle.debug(True)
aufrufen.
Jinja scheint immer noch seine Vorlagen zu speichern. Ich glaube, das liegt an der Art und Weise, wie der jinja2-Adapter für Flasche geschrieben wird (er verwendet nur einen Standard-Jinja2-Lader und stellt nicht viele Konfigurationsoptionen bereit).
Nach den Jinja2-Dokumenten habe ich diesen benutzerdefinierten Loader geschrieben, von dem ich erwarte, dass er jedes Mal eine Vorlage neu laden wird Zeit, aber es scheint auch nicht zu funktionieren:
%Vor%Vorlagen werden immer noch zwischengespeichert, bis ich dev_appserver neu starte. Dies muss ein ziemlich häufiges Problem sein. Hat jemand eine Lösung, die funktioniert?
UPDATE:
Ich habe etwas gemacht wie:
%Vor%Dies bewirkt, dass die Vorlagen immer neu geladen werden, jedoch nur, wenn ein Python-Modul berührt wurde. Wenn Sie also nur eine Vorlagendatei bearbeiten, werden die Änderungen erst wirksam, wenn Sie eine der Python-Dateien bearbeiten, die sie importieren. Es scheint, als würden die Vorlagen irgendwo zwischengespeichert.
Ich habe dieses Problem gelöst, indem ich die Template-Lösungen der Flasche komplett weggeworfen und reines jinja2 verwendet habe. Es scheint, dass Jijnjas FileSystemLoader
der einzige ist, der nach Dateiänderungen schauen kann.
Ich habe die neue template
-Funktion wie folgt definiert (sie sucht nach Dateien in views/
, genau wie bei flaschen):
Dann benutze ich es so:
%Vor% Der Unterschied zur Flaschen-API besteht darin, dass Sie .tpl
in den Dateinamen einfügen müssen und Sie Kontextvariablen als Wörterbuch übergeben müssen.
Mit dem Flaschendekorateur können Sie einfach @view('your_view', cache_size=0)
machen.
Flasche hat einen reloader=True
-Parameter im Serveradapter, aber ich denke, es funktioniert nur mit SimpleTemplate. Ich werde versuchen, dieses Verhalten auf andere Template-Engines auszuweiten.
Wenn du es in all deinen Ansichten machen willst, kannst du vielleicht so etwas machen:
%Vor% Auf diese Weise können Sie nur im Debug-Modus eine if-Anweisung zu diesem Code if bottle.DEBUG
hinzufügen.