如何从 DjangoCMS 菜单中排除未发布的页面?

How to exclude unpublished pages from DjangoCMS menu?

我有一个要管理的 DjangoCMS 网站。我只需要为 EN 语言发布一个页面。问题是还有 3 种语言,当我只为 EN 发布页面时,它也可以在其他语言菜单中使用。菜单项名称是英文的,这让网站看起来很不专业。这是 DjangoCMS 菜单逻辑或编码不当的网站的特定弱点吗?

我发现还有其他人也报告了这个问题 - https://github.com/divio/django-cms/issues/6004

如何排除不需要的页面以显示在其他语言的菜单上?

@lazdins 这可以在 3.7.1 中修复:“修复了一个错误,即使请求的页面是 public 页面,菜单也会呈现草稿页面。当用户没有更改时会发生这种情况权限请求编辑模式。” https://github.com/divio/django-cms/blob/develop/CHANGELOG.rst#371-2019-11-26

3.4 我也不再支持,建议您移至 3.7,因为它是当前支持的 LTS 版本,也是我发表评论时推荐的版本:https://www.django-cms.org/en/roadmap/

我也已将此发布到问题中。 https://github.com/divio/django-cms/issues/6004#issuecomment-702052627

我的解决方案是在 settings.py 更改如下:

'hide_untranslated': 正确,

CMS_LANGUAGES = {
    1: [
        {
            'code': 'en',
            'name': gettext('English'),
            'fallbacks': ['de', 'fr'],
            'public': True,
            'hide_untranslated': True,
            'redirect_on_fallback': False,
        },
        {
            'code': 'de',
            'name': gettext('Deutsch'),
            'fallbacks': ['en', 'fr'],
            'public': True,
        },
        {
            'code': 'fr',
            'name': gettext('French'),
            'public': False,
        },
    ],
    2: [
        {
            'code': 'nl',
            'name': gettext('Dutch'),
            'public': True,
            'fallbacks': ['en'],
        },
    ],
    'default': {
        'fallbacks': ['en', 'de', 'fr'],
        'redirect_on_fallback': True,
        'public': True,
        'hide_untranslated': False,
    }
}

http://docs.django-cms.org/en/latest/reference/configuration.html#cms-languages