Некорректное отображение переведенных полей в плагине Django CMS

Я столкнулся с проблемой рендеринга переведенных полей в плагине Django CMS, используя django-modeltranslation. Предполагается, что плагин должен отображать переведенный контент в зависимости от выбранного языка, но он отображает только язык по умолчанию.

Все остальные части страницы, не относящиеся к плагину CMS, которые также используют django-modeltranslation, переводятся и отображаются правильно.

Вот краткий обзор установки:

  • Я использую django==4.2.10; django-cms==4.1.0; вместе с django-modeltranslation==0.18.11 для поля модели translations.
  • В рассматриваемом плагине (HeaderPlugin) есть одно поле, которое переводится с помощью django-modeltranslation.
  • Шаблон (cms_plugins/header/list_items.html) включает только {{ instance }},
    . но переведенные поля не отображаются так, как ожидалось при переключении языков. {{ instance }} отображает экземпляр только в том случае, если выбран язык по умолчанию.
  • Плагин используется в рамках {% static_alias 'header' %}. Примечательно, что когда я хочу установить плагин для страницы с языком не по умолчанию через выпадающее меню Aliases..., он перенаправляет на язык по умолчанию (поскольку страница не существует). Таким образом, я могу установить плагин только для языка по умолчанию.

Плагин и связанная с ним модель:

#cms_plugins.py
@plugin_pool.register_plugin
class HeaderPlugin(CMSPluginBase):
    model = HeaderPlugin
    module = _("Header")
    name = _("Header Plugin")
    render_template = "cms_plugins/header/list_items.html"

    def render(self, context, instance, placeholder):
        print("Not displayed when rendering in a non-default language")
        context.update({
            'instance': instance,
            'placeholder': placeholder,
            'lan_nl': instance.html_nl,
            'lan_en': instance.html_en,
        })
        return context

# models.py
class HeaderPlugin(CMSPlugin):
    header = models.ForeignKey(Header,
                               on_delete=models.PROTECT,
                               blank=False, null=False,
                               help_text=_("Select a header"))
    html = HTMLField(blank=True, default="",
                     help_text=_("Automatically generated field to reduce overhead"))

    def __str__(self):
        return f"Header plugin | {self.header.name}"

Шаблон cms_plugins/header/list_items.html содержит только {{ instance }}. Модель (HeaderPlugin) правильно настроена на перевод с помощью django-modeltranslation, а поля зарегистрированы для перевода в опциях перевода модели. Переводы существуют для экземпляра HeaderPlugin. Я проверил это с помощью админки Django, шаблона {{ lan_nl }} и {{ lan_en }} (когда выбран язык по умолчанию).

Любые предложения или соображения о том, как устранить неполадки и решить эту проблему, будут высоко оценены.

Вернуться на верх