Zurücksetzen des Cache für Django-Cache-Vorlagenlader

8

Django 1.2 führte einen neuen Template Loader ein, der Daten im Cache speichert ( django.template.loaders.cached.Loader ).

Leider habe ich keine Informationen darüber gefunden, wie der Cache ungültig wird und wann und wie er zurückgesetzt wird.

Ich möchte dies auf meinem Server verwenden, aber ich bin mir nicht sicher, ob es beim Neustart von django zurückgesetzt würde (das wäre genug für mich).

    
DataGreed 01.11.2010, 17:07
quelle

3 Antworten

4

Wenn Sie in die Quelle von django eintauchen, können Sie feststellen, dass die Vorlagenlader für die aktuelle Serverinstanz unter django.template.loader.template_source_loaders gespeichert sind.

Wenn Sie einen gecachten Loader verwenden, gibt es nur einen Loader. So können Sie es erhalten und ruft seine Reset-Funktion, um Vorlage Cache zurücksetzen.

Hier sind einige Code-Schnipsel, ich habe es nicht selbst getestet.

%Vor%

Wenn Sie django.template.loaders.cached überprüfen, können Sie sehen, dass django einfach eine Variable template_cache verwendet, um den Vorlagennamen im Vorlagenpfadcache zu speichern. Es verwendet nicht memcached. So sollte es zurückgesetzt werden, wenn Django neu starten.

    
adieu 01.11.2010, 17:38
quelle
4
%Vor%

Da gehen Sie:)

    
Davide Callegari 03.02.2014 11:44
quelle
1

Nur diese Lösung wird garantiert funktionieren, einschließlich der Produktionsumgebung, ohne Neustart des Servers und selbst wenn Sie 'django.template.loaders.cached.Loader' backend verwenden:

%Vor%

Dies ist ein expliziter absoluter Import, der zum Patchen globaler Variablen verwendet werden kann. Sie können sicher sein, dass andere Antworten falsch sind, nachdem {% include 'some_template' %} template tag verwendet wurde (Cache von 'some_template' wird nicht zurückgesetzt, nachdem loader.reset() verwendet wurde, wobei loader nur Iterator von template_source_loaders ist, importiert durch relativen Import.

Ich habe diese Methode verwendet, um die in der Datenbank gespeicherten Vorlagen zu entwerten (erstellt von django-dbtemplates Bibliothek) und welche von {% include %} template tag in normale Templates eingebunden.

    
zen11625 29.09.2015 08:37
quelle