首页 > 解决方案 > Wagtail-ModelTranslation 模板片段缓存

问题描述

我已经使用 wagtail 和 wagtail-modeltranslation 实现了一个多语言站点,但是我遇到了模板片段缓存的问题。缓存有效,但不尊重单独的语言。保存后首先访问的语言将适用于所有语言。我尝试了两种设置缓存键的方法都无济于事。首先来自django 文档,其次尝试在模板中显式包含语言代码

第一的:

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

无论不包括任何与语言相关的参数,这都会清除正确的片段

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

标签: pythondjangodjango-templateswagtaildjango-modeltranslation

解决方案


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

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

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

这里需要注意的是,您需要小心 Wagtail 中的模板片段缓存,因为预览的、未发布的内容将被缓存


推荐阅读