Django模板标签 - 运行一次并使用该值

时间:2017-02-15 05:21:57

标签: django templatetags

我在模板中有一个循环:

 {% 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)

1 个答案:

答案 0 :(得分:0)

您可以在此处使用django的模板缓存。

您可以调用创建新的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