From e23cdcf5fd2921c25abb09ec12537f49f9bb7b13 Mon Sep 17 00:00:00 2001 From: Fabian Braun Date: Thu, 11 Jul 2024 17:08:41 +0200 Subject: [PATCH] Fix: Show fallback language titles in pagetree --- cms/admin/pageadmin.py | 4 ++-- cms/templates/admin/cms/page/tree/menu.html | 2 +- cms/templatetags/cms_admin.py | 26 ++++++++++++--------- cms/tests/test_templatetags.py | 14 +++++------ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/cms/admin/pageadmin.py b/cms/admin/pageadmin.py index f996d0fb746..af5d4d7be34 100644 --- a/cms/admin/pageadmin.py +++ b/cms/admin/pageadmin.py @@ -1144,7 +1144,7 @@ def changelist_view(self, request, extra_context=None): Prefetch( 'pagecontent_set', to_attr='filtered_translations', - queryset=self.get_queryset(request), + queryset=page_contents, ), ) @@ -1381,7 +1381,7 @@ def get_tree(self, request): Prefetch( 'pagecontent_set', to_attr='filtered_translations', - queryset=self.get_queryset(request), + queryset=PageContent.admin_manager.get_queryset(), ), ) rows = self.get_tree_rows( diff --git a/cms/templates/admin/cms/page/tree/menu.html b/cms/templates/admin/cms/page/tree/menu.html index 9323e096df6..013b3ee495e 100644 --- a/cms/templates/admin/cms/page/tree/menu.html +++ b/cms/templates/admin/cms/page/tree/menu.html @@ -228,7 +228,7 @@ {% block extra_cols %}{% endblock %} > - {% language LANGUAGE_CODE %} + {% language preview_language %} {% get_page_display_name page %} {% endlanguage %} diff --git a/cms/templatetags/cms_admin.py b/cms/templatetags/cms_admin.py index c14e76be102..ef36718fbfa 100644 --- a/cms/templatetags/cms_admin.py +++ b/cms/templatetags/cms_admin.py @@ -99,28 +99,32 @@ def get_page_display_name(cms_page): if not cms_page.page_content_cache: cms_page.set_translations_cache() + fallback_found = False if not cms_page.page_content_cache.get(language): + fallback_found = True fallback_langs = i18n.get_fallback_languages(language) - found = False for lang in fallback_langs: if cms_page.page_content_cache.get(lang): - found = True language = lang - if not found: + break + else: language = None for lang, item in cms_page.page_content_cache.items(): if not isinstance(item, EmptyPageContent): language = lang - if not language: - return _("Empty") + break + else: + return _("Empty") page_content = cms_page.page_content_cache[language] if page_content.title: - return page_content.title - if page_content.page_title: - return page_content.page_title - if page_content.menu_title: - return page_content.menu_title - return cms_page.get_slug(language) + title = page_content.title + elif page_content.page_title: + title = page_content.page_title + elif page_content.menu_title: + title = page_content.menu_title + else: + title = cms_page.get_slug(language) + return mark_safe(f"{title} ({language})") if fallback_found else title class TreePublishRow(Tag): diff --git a/cms/tests/test_templatetags.py b/cms/tests/test_templatetags.py index ab0a028dffb..e1ed85cd2a2 100644 --- a/cms/tests/test_templatetags.py +++ b/cms/tests/test_templatetags.py @@ -80,16 +80,16 @@ def test_get_admin_tree_title(self): with self.settings(CMS_LANGUAGES=languages): with force_language('fr'): page.page_content_cache = {'en': PageContent(page_title="test2", title="test2")} - self.assertEqual('test2', force_str(get_page_display_name(page))) + self.assertEqual('test2 (en)', force_str(get_page_display_name(page))) page.page_content_cache = {'en': PageContent(page_title="test2")} - self.assertEqual('test2', force_str(get_page_display_name(page))) - page.page_content_cache = {'en': PageContent(menu_title="test2")} - self.assertEqual('test2', force_str(get_page_display_name(page))) + self.assertEqual('test2 (en)', force_str(get_page_display_name(page))) + page.page_content_cache = {'en': PageContent(menu_title="menu test2")} + self.assertEqual('menu test2 (en)', force_str(get_page_display_name(page))) page.page_content_cache = {'en': PageContent()} - page.urls_cache = {'en': PageUrl(slug='test2')} - self.assertEqual('test2', force_str(get_page_display_name(page))) + page.urls_cache = {'en': PageUrl(slug='slug-test2')} + self.assertEqual('slug-test2 (en)', force_str(get_page_display_name(page))) page.page_content_cache = {'en': PageContent(), 'fr': EmptyPageContent('fr')} - self.assertEqual('test2', force_str(get_page_display_name(page))) + self.assertEqual('slug-test2 (en)', force_str(get_page_display_name(page))) def test_get_site_id_from_nothing(self): with self.settings(SITE_ID=10):