2017-02-15 1 views
1

Ich habe eine Schleife in einer Vorlage:Django Vorlage Tags- einmal ausgeführt und verwenden diesen Wert

{% for item in replies %} 
.... 
     {% include '...show_content.html' with poall=item.limited_content_chunks %} 

Im Modell ich eine Funktion/Eigenschaft haben, die einmal berechnen, was ich will berechnet. Problem ist, dass dies jedes Mal aufgerufen wird, wenn eine Seite aktualisiert wird. Was ist der effektivste Weg, um dieses Problem zu lösen?

I Wörterbuch der vorausberechneten Stücke für jede Antwort in Antworten schaffen könnte und als Kontextobjekt schicken, oder ich könnte ...

def limited_content_chunks(self, percentage=None): 
    if not self.content and self.po_file: 
    # do crazy stuff which could might lead to a nuclear war 
    .... 
    return ' '.join(chunks) 

Antwort

0

Sie können hier Djangos Template-Caching verwenden.

Sie können anrufen erstellen Sie eine neue HTML-Vorlage und fügen Sie Ihre heavy-Duty-Content-Vorlage wie folgt ein.

Ihre aktuelle Vorlage sieht wie folgt nun und

{% for item in replies %} 
.... 
     {% include 'cached_content.html' with item=item %} 

{% endfor %} 

Und die cached_content.html

{% load cache %} 
{% cache 300 item.id %} 
    {% include '...show_content.html' with poall=item.limited_content_chunks %} 
{% endcache %} 

Die caching ein Disk-basierten Cache AFAIK ist, was bedeutet, wenn Sie 100 von Servern auf den ersten haben ausführen Dein nuklearer Code, um den Cache einzurichten. Es sollte auch zentralisiertes Implementieren der Implementierung für Vorlagen geben.

Zweitens, wenn Sie anforderungsspezifischen Code in Ihrer Vorlage haben, wird es brechen, weil der Schlüssel für Ihre Vorlage Cache nur item.id ist.

+0

danke! Implementiert und hat sehr gut funktioniert –

Verwandte Themen