Wagtail-ModelTranslation 模板片段缓存
Wagtail-ModelTranslation Template Fragment Caching
我已经使用 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)
无论不包括任何与语言相关的参数,这确实清除了正确的片段
如有任何帮助,我们将不胜感激。谢谢!
只要 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.
我已经使用 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)
无论不包括任何与语言相关的参数,这确实清除了正确的片段
如有任何帮助,我们将不胜感激。谢谢!
只要 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.