我使用 RoutablePageMixin 创建了一个页面并定义了一个子路径。我想使用 gettext_lazy 根据活动语言翻译这个子路径,就像它在 Django 中的 urlpatterns 中一样。我总是得到 404。这可能吗还是我错过了什么?
这是我的页面定义:
class StudyBrowserPage(RoutablePageMixin, TranslatedPage):
page_description = "Weiterleitung zum Studienbrowser"
@path('')
def list_studies(self, request):
studies = Study.objects.all()
return self.render(request, context_overrides={
'studies': studies
})
# here I actually want another parameter, but i tried to keep it simple. So don't mind the uselessness of the function.
@path(_('studie') + '/')
def study_detail_view(self, request):
return self.render(request, template='wagtail_home/study_detail.html')
我已经在 django.po 中翻译了该字符串:
msgid "studie"
msgstr "study"
拨打
.../studie/
有效。 .../study/
没有。
编辑: 我想我的配置中有所有必要的设置:
“上下文处理器”: 'django.template.context_processors.i18n',
USE_I18N = 真 WAGTAIL_I18N_ENABLED = True
我还安装了 wagtail-localize。
这很可能是因为
_('studie')
仍然是代理,在解释时未解析为惰性字符串,或者当您使用 /study/
时未激活英语区域设置。
如果是第一个,也许尝试将路径分配给变量然后强制它:
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
STUDY_PATH = _('studie')
class StudyBrowserPage(RoutablePageMixin, TranslatedPage):
....
@path(force_str(STUDY_PATH) + '/')
def study_detail_view(self, request):
return self.render(request, template='wagtail_home/study_detail.html')
不过声明多个路径可能更简单:
@path('studie/')
@path('study/')
def study_detail_view(self, request):
return self.render(request, template='wagtail_home/study_detail.html')