Was ist der beste Weg, um das Speichern von Jinja2-Vorlagen in bottle.py zu deaktivieren?

8

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.

    
leted 22.12.2011, 19:21
quelle

4 Antworten

6

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):

%Vor%

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.

    
ymir 22.02.2012, 13:17
quelle
5

Bottle speichert Vorlagen intern (unabhängig vom Jinja2-Caching). Sie können den Cache über bottle.debug(True) oder bottle.run(..., debug=True) deaktivieren oder den Cache mit bottle.TEMPLATES.clear() löschen.

    
defnull 02.02.2012 13:03
quelle
3

Das Umgebung -Objekt in jinja2 hat einen Konfigurationswert für die Cachegröße und laut Dokumentation,

  

Wenn die Cachegröße auf 0 gesetzt ist, werden die Vorlagen ständig neu kompiliert

Haben Sie so etwas versucht?

%Vor%     
jcollado 22.12.2011 20:33
quelle
1

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.

    
iurisilvio 25.12.2011 13:31
quelle

Tags und Links