如何在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
相关产品推荐
相关产品推荐

