【问题标题】:Django template cache - Dynamic key based on template variableDjango 模板缓存 - 基于模板变量的动态键
【发布时间】:2019-06-12 11:10:12
【问题描述】:

我需要使用参数作为前缀来存储模板缓存。

Es。 与:

{% cache 5 :name:variable1: variable_y variable_z %}
    <p> {{variable1}} </p>
{% endcache %}

其中 variable1 是一个字符串

我需要存储:

:1:template.cache:name:"variable1 value":.0ecadd093a225ba502d3f6490e19b4

其实我得到:

:1:template.cache:name:variable1:.0ecadd093a225ba502d3f6490e19b4

其中 variable1 是变量名。

有办法吗? 谢谢

【问题讨论】:

  • 您可以从视图中传递准备使用的密钥。
  • 我从视图中传递变量 1,它是一个字符串。我想在redis键中写入字符串值,但实际上我获得了变量名(“variable1”)

标签: django django-templates django-cache


【解决方案1】:

可以使用Django Advanced Cache Templatetag

对于 python 3: pip install django-adv-cache-tag

对于 python 2 的支持: pip install 'django-adv-cache-tag&lt;1.0'

'adv_cache_tag' 添加到INSTALLED_APPS=[...]

在你的 settings.py 中添加ADV_CACHE_RESOLVE_NAME = True

{% load cache %} 更改为{% load adv_cache %}

来自文档:

ADV_CACHE_RESOLVE_NAME 设置为True,如果您有 在您的上下文中名为 fragment_name 的变量:

{% cache 0 fragment_name obj.pk obj.date_last_updated %}

如果你想传递一个名字,你必须用引号括起来:

{% cache 0 "myobj_main_template" obj.pk obj.date_last_updated %}

ADV_CACHE_RESOLVE_NAME设置为False,默认名称为 总是被视为一个字符串,但如果被引号包围,它们将被删除。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 2021-09-14
    • 1970-01-01
    • 2017-08-13
    • 2016-12-02
    • 2014-03-10
    • 2017-10-25
    • 2013-08-08
    • 2018-06-23
    相关资源
    最近更新 更多