Кэширование фрагментов шаблона Wagtail-ModelTranslation - PullRequest
1 голос
/ 17 февраля 2020

Я реализовал многоязычный сайт, использующий перевод wagtail и wagtail-model, но у меня проблема с кэшированием фрагментов шаблона. Кеш работает, но не уважает отдельные языки. Какой бы язык ни был доступен первым после сохранения, он будет использоваться для всех языков. Я пробовал два способа установки ключа кеша безрезультатно. Первый из 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)

Это очищает правильный фрагмент независимо от того, не включены ли какие-либо языковые аргументы

Любая помощь будет с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

Ваш первый подход должен работать при условии, что LANGUAGE_CODE фактически определено в контексте. Это не происходит автоматически, поэтому вам, вероятно, просто нужно сначала установить :

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

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

Заметим, что вам нужно быть осторожным с кэшированием фрагментов шаблона в Wagtail, из-за предварительного просмотра неопубликованный контент будет кэширован .

...