2017-02-15 3 views
1

У меня есть цикл в шаблоне:Django шаблон теги-запустить один раз и использовать это значение

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

В модели у меня есть функция/свойство, которое вычисляет то, что я хочу, чтобы вычислить один раз. Проблема заключается в том, что вызов вызывается каждый раз, когда обновляется страница. Каков наиболее эффективный способ решения этой проблемы?

я мог бы создать словарь предварительно вычисленных куски для каждого ответа в ответах, и направить его в качестве объекта контекста, или я мог бы ...

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) 

ответ

0

Вы можете использовать кэширование шаблона Джанго здесь.

Вы можете создать новый html-шаблон и включить в него шаблон для тяжелых условий работы.

Ваш текущий шаблон будет выглядеть так и

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

{% endfor %} 

И в cached_content.html

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

Кэширование Шаблон представляет собой основанный дисковый кэш AFAIK, который означает, что если у вас есть 100 из серверов в первой будет выполняться ваш ядерный код для настройки кеша. Также должно быть реализовано централизованное кэширование для шаблонов.

Во-вторых, если у вас есть запрос определенного кода в шаблоне, он сломается, потому что ключ для кеша шаблона равен item.id.

+0

спасибо! Реализовано и работает очень хорошо –