Wagtail-ModelTranslation模板片段缓存

问题描述 投票:1回答:1

我已经使用了wagtail和wagtail-modeltranslation实现了多语言站点,但是模板片段缓存存在问题。缓存有效,但不遵循单独的语言。保存后首先访问的是哪种语言,它将被所有语言使用。我尝试了两种将缓存键设置为无效的方法。首先从django docs开始,其次尝试在模板中明确包含语言代码

第一:

{% cache 604800 about_copy LANGUAGE_CODE %}
... HTML ...
{% endcache %}

第二:使用简单的模板标签

from django.utils.translation import get_language

@register.simple_tag(takes_context=True)
def get_lang(context, *args, **kwargs):
    return get_language()
{% cache 604800 about_copy get_lang %}
... HTML ...
{% endcache %}

我的保存方法如下:

    def save(self, *args, **kwargs):
        """Create a template fragment key.
        Then delete the key."""

        key = make_template_fragment_key("about_copy")
        cache.delete(key)

        return super().save(*args, **kwargs)

这确实清除了正确的片段,而不管不包括任何与语言相关的参数

任何帮助将不胜感激。谢谢!

python django django-templates wagtail django-modeltranslation
1个回答
0
投票

您的第一种方法应该可以工作,但前提是LANGUAGE_CODE实际上是在上下文中定义的。这不会自动发生,因此您可能只需要先set it

{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}

{% cache 604800 about_copy LANGUAGE_CODE %}
... HTML ...
{% endcache %}

这里的补充说明是,您需要注意Wagtail中模板片段的缓存,因为previewed, non-published content will get cached

© www.soinside.com 2019 - 2024. All rights reserved.