python - 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)
无论不包括任何与语言相关的参数,这都会清除正确的片段
任何帮助将不胜感激。谢谢!
解决方案
您的第一种方法应该工作提供LANGUAGE_CODE
实际上是在上下文中定义的。这不会自动发生,因此您可能只需要先设置它:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% cache 604800 about_copy LANGUAGE_CODE %}
... HTML ...
{% endcache %}
这里需要注意的是,您需要小心 Wagtail 中的模板片段缓存,因为预览的、未发布的内容将被缓存。
推荐阅读
- github - 使用没有 authtoken 的 Github 包注册表
- java - 我需要关于我的抽象类是否应该是接口的建议(反之亦然)
- google-compute-engine - GCP 中是否有任何工具可以修补计算实例?
- c# - 在 .NET4.5 上安装 EntityFramework5.0.0 后错误:“System.Data.Entity.Internal.AppConfig”的类型初始化程序在运行时引发异常
- spring - 使用 i18n 用点而不是逗号格式化货币
- php - 如何在 laravel 中处理基于条件的验证?
- android - Wifi Direct:一对多
- ios - 如何覆盖目标平台中不可用但在 Base SDK 中可用的方法
- php - Shopware:如何向现有的第三方插件添加新字段
- epplus - 无法在 EPPLUS 中检索实际公式结果