You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:41:00