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

如何在Wagtail模板中实现用户动态选择内容语言?

Wagtail 3.0.3 多语言切换链接修复方案

问题排查与修复步骤

1. 加载必要模板标签

确保模板开头引入所需的模板标签,否则标签无法解析:

{% load i18n wagtailcore_tags %}

其中i18n提供get_language_info和language标签,wagtailcore_tags提供pageurl标签。

2. 处理翻译页面缺失情况

page.localized仅在页面存在对应语言的翻译版本时生效,需添加缺失判断:

{% for language_code, language_name in LANGUAGES %}
{% get_language_info for language_code as lang %}

{% language language_code %}
    {% with translated_page=page.localized %}
        {% if translated_page %}
            <a href="{% pageurl translated_page %}" rel="alternate" hreflang="{{ language_code }}">
                {{ lang.name_local }}
            </a>
        {% else %}
            <span>{{ lang.name_local }}(暂无翻译)</span>
        {% endif %}
    {% endwith %}
{% endlanguage %}
{% endfor %}

3. 验证语言配置一致性

确保项目settings.py中LANGUAGES与WAGTAIL_CONTENT_LANGUAGES配置匹配:

from django.utils.translation import gettext_lazy as _

LANGUAGES = [
    ('en', _('English')),
    ('zh-hans', _('简体中文')),
]

WAGTAIL_CONTENT_LANGUAGES = LANGUAGES

4. 检查中间件顺序

settings.py的MIDDLEWARE需包含LocaleMiddleware,且顺序需符合要求:

MIDDLEWARE = [
    # 其他中间件...
    'django.middleware.locale.LocaleMiddleware',
    'wagtail.contrib.settings.middleware.SettingsMiddleware',
    # 其他中间件...
]

LocaleMiddleware需放在CommonMiddleware、SessionMiddleware之后。

5. 确认页面翻译状态

进入Wagtail后台,检查当前页面是否已为目标语言创建翻译版本,无翻译时page.localized会返回原页面。


内容的提问来源于stack exchange,提问作者Hariprasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:17:35