Некорректное отображение переведенных полей в плагине 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 }} (когда выбран язык по умолчанию).
Любые предложения или соображения о том, как устранить неполадки и решить эту проблему, будут высоко оценены.