【发布时间】:2022-01-03 22:14:37
【问题描述】:
我是 wagtail 的新手,我正在使用自定义菜单。我设置了一个自定义菜单类并使用标签来显示模板中的菜单项。 这很好用,但是我需要根据我的网站使用的语言创建不同的菜单。(我知道 wagtailmenus 存在,但我也找不到一种令人满意的方式来创建翻译菜单)
我想创建类似 wagtail-localize 的页面翻译体验。这是可能的还是我必须采取不同的方法?
我已经尝试使用 wagtails TranslatableMixin 来简单地创建具有不同翻译的菜单的副本,但这似乎不起作用,因为缺少翻译选项(就像对页面所做的那样)。
类:
class Menu(TranslatableMixin, ClusterableModel):
title = models.CharField(max_length=100)
logo = models.ForeignKey("wagtailimages.Image", blank=True, null=True, on_delete=models.SET_NULL, related_name="menu_logo")
image = models.ForeignKey("wagtailimages.Image", blank=True, null=True, on_delete=models.SET_NULL, related_name="menu_image")
slug = AutoSlugField(populate_from="title", editable=True)
panels = [
MultiFieldPanel(
[
FieldPanel("title"),
FieldPanel("slug"),
ImageChooserPanel("logo"),
ImageChooserPanel("image"),
],
heading="Menu",
),
InlinePanel("menu_items", label="Menu Item"),
]
def __str__(self):
return self.title
class Meta(TranslatableMixin.Meta):
verbose_name = "Menu"
class MenuItem(ClusterableModel, AbstractMenuItem):
page = ParentalKey("Menu", related_name="menu_items")
class Meta:
verbose_name = "Menu Item"
模板标签:
@register.simple_tag()
def get_menu(slug, authencicated):
menu = Menu.objects.get(slug=slug)
all_menu_items = menu.menu_items.all()
menu_items = []
for item in all_menu_items:
if item.show(authencicated):
menu_items.append(item)
return {"logo": menu.logo, "image": menu.image, "items": menu_items}
模板:
{% get_menu "main-menu" request.user.is_authenticated as menu%}
【问题讨论】:
标签: django wagtail translate wagtail-localize