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

Django template tags- run once and use that value

我在模板中有一个循环:

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

在模型中,我有一个 function/property 可以计算我想计算一次的东西。 问题是每次页面刷新时都会调用它。 解决这个问题最有效的方法是什么?

我可以为回复中的每个回复创建预计算块的字典并将其作为上下文对象发送,或者我可以...

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)

这里可以使用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