在Wagtail多语言站点中如何获取根页面本地化同级页面生成对应菜单?
多语言菜单实现方案
针对你的多语言场景,可通过Wagtail的本地化页面关联机制获取对应语言的根页面,进而生成对应语言的菜单。修改后的代码实现如下:
from wagtail.core.models import Site, Locale from django.utils.translation import get_language @register.simple_tag(takes_context=True) def get_menuitems(context): # 获取当前请求的语言代码 current_lang = get_language() # 获取当前站点的英文根页面(假设英文locale代码为'en') en_locale = Locale.objects.get(language_code='en') site = Site.find_for_request(context["request"]) en_root_page = site.root_page.localized.get_translation(en_locale) # 获取英文根页面对应当前语言的本地化版本 localized_root_page = en_root_page.get_translation(current_lang) # 若当前语言无对应本地化页面,降级使用英文根页面 if not localized_root_page: localized_root_page = en_root_page # 生成对应语言的菜单 menuitems = localized_root_page.get_children().live().in_menu() return menuitems
关键逻辑说明
- 获取当前语言:通过
get_language()拿到当前请求的语言代码,比如zh-hans或en - 定位英文根页面:先找到站点默认根页面,再通过
get_translation(en_locale)获取其英文版本 - 获取本地化根页面:调用
get_translation(current_lang)找到英文根页面在当前语言下的同级本地化页面 - 降级处理:如果当前语言没有对应的本地化页面,直接用英文根页面作为备选
注意事项
- 确保页面已正确配置本地化关联,每个根页面的语言版本都通过Wagtail本地化功能建立了关联
- 根据实际locale代码调整
en,比如英文是en-us就改成对应代码
内容的提问来源于stack exchange,提问作者janeden
相关产品推荐
相关产品推荐

