Wagtail的{% slugurl 'page' %}标签是否兼容Wagtail-localize?
问题:Wagtail Localize环境下slugurl标签始终生成默认语言链接
我使用Django、Wagtail和Wagtail Localize搭建网站,当访问https://exemple.com/fr/时,模板中的slugurl标签生成的链接始终为href="/en/about/"。
已完成以下配置:
- 按要求配置了
urls.py:urlpatterns = urlpatterns + i18n_patterns( path("search/", search_views.search, name="search"), path("", include(wagtail_urls)), ) - 添加了必要的多语言中间件及
LANGUAGES等设置,页面可正常翻译并通过对应语言URL访问 LANGUAGE_CODE检测正常(如{% if LANGUAGE_CODE == "fr" %}可正确执行)
但模板中以下代码始终输出英文路径:
<a href="{% slugurl 'about' %}" class="nav-links">about</a>
这导致导航时每次都需要重新选择语言,想确认slugurl标签是否兼容Wagtail-localize?
解答
slugurl标签本身不会自动适配Wagtail Localize的多语言页面,它默认只会匹配网站默认语言版本的页面slug。要生成当前请求语言对应的页面链接,有两种解决方式:
使用Wagtail Localize提供的
localized_slugurl标签
先在模板顶部加载wagtail_localize标签库,然后替换原有标签:{% load wagtail_localize %} <a href="{% localized_slugurl 'about' %}" class="nav-links">about</a>该标签会自动识别当前请求的语言,生成对应翻译版本页面的URL。
给
slugurl指定语言参数
如果不想更换标签,可以手动传入当前语言的LANGUAGE_CODE作为参数:<a href="{% slugurl 'about' LANGUAGE_CODE %}" class="nav-links">about</a>这会强制
slugurl匹配指定语言版本的页面。
另外需要确认:每个语言版本的页面都已正确创建,且页面slug与标签中传入的参数匹配(比如法语页面的slug是否为about),否则标签会因找不到对应页面而 fallback 到默认语言路径。
内容的提问来源于stack exchange,提问作者AnxiousDeadlift
相关产品推荐
相关产品推荐

