def get_page_choices(lang=None): from django.core.cache import cache lang = lang or i18n.get_current_language() page_choices = cache.get(_page_cache_key(lang)) if page_choices is None: page_choices = update_site_and_page_choices(lang)[1] return page_choices
def get_page_choices(lang=None): from django.core.cache import cache lang = lang or i18n.get_current_language() page_choices = cache.get(_page_cache_key(lang)) if page_choices is None: site_choices, page_choices = update_site_and_page_choices(lang) return page_choices
def update_site_and_page_choices(lang=None): lang = lang or i18n.get_current_language() SITE_CHOICES_KEY = _site_cache_key(lang) PAGE_CHOICES_KEY = _page_cache_key(lang) title_queryset = (Title.objects.drafts() .select_related('page', 'page__site') .order_by('page__path')) pages = defaultdict(OrderedDict) sites = {} for title in title_queryset: page = pages[title.page.site.pk].get(title.page.pk, {}) page[title.language] = title pages[title.page.site.pk][title.page.pk] = page sites[title.page.site.pk] = title.page.site.name site_choices = [] page_choices = [('', '----')] try: fallbacks = i18n.get_fallback_languages(lang) except LanguageError: fallbacks = [] language_order = [lang] + fallbacks for sitepk, sitename in sites.items(): site_choices.append((sitepk, sitename)) site_page_choices = [] for titles in pages[sitepk].values(): title = None for language in language_order: title = titles.get(language) if title: break if not title: continue indent = u" " * (title.page.depth - 1) page_title = mark_safe(u"%s%s" % (indent, escape(title.title))) site_page_choices.append((title.page.pk, page_title)) page_choices.append((sitename, site_page_choices)) from django.core.cache import cache # We set it to 1 day here because we actively invalidate this cache. cache.set(SITE_CHOICES_KEY, site_choices, 86400) cache.set(PAGE_CHOICES_KEY, page_choices, 86400) return site_choices, page_choices
def update_site_and_page_choices(lang=None): lang = lang or i18n.get_current_language() SITE_CHOICES_KEY = _site_cache_key(lang) PAGE_CHOICES_KEY = _page_cache_key(lang) title_queryset = (Title.objects.drafts() .select_related('page', 'page__site') .order_by('page__path')) pages = defaultdict(SortedDict) sites = {} for title in title_queryset: page = pages[title.page.site.pk].get(title.page.pk, {}) page[title.language] = title pages[title.page.site.pk][title.page.pk] = page sites[title.page.site.pk] = title.page.site.name site_choices = [] page_choices = [('', '----')] try: fallbacks = i18n.get_fallback_languages(lang) except LanguageError: fallbacks = [] language_order = [lang] + fallbacks for sitepk, sitename in sites.items(): site_choices.append((sitepk, sitename)) site_page_choices = [] for titles in pages[sitepk].values(): title = None for language in language_order: title = titles.get(language) if title: break if not title: continue indent = u" " * (title.page.depth - 1) page_title = mark_safe(u"%s%s" % (indent, title.title)) site_page_choices.append((title.page.pk, page_title)) page_choices.append((sitename, site_page_choices)) from django.core.cache import cache # We set it to 1 day here because we actively invalidate this cache. cache.set(SITE_CHOICES_KEY, site_choices, 86400) cache.set(PAGE_CHOICES_KEY, page_choices, 86400) return site_choices, page_choices
def update_site_and_page_choices(language=None): if language is None: language = i18n.get_current_language() site_choices = [] page_choices = [('', '----')] site_choices_key = _site_cache_key(language) page_choices_key = _page_cache_key(language) for site in get_sites(): _page_choices = list(get_page_choices_for_site(site, language)) site_choices.append((site.pk, site.name)) page_choices.append((site.name, _page_choices)) from django.core.cache import cache # We set it to 1 day here because we actively invalidate this cache. cache.set(site_choices_key, site_choices, 86400) cache.set(page_choices_key, page_choices, 86400) return site_choices, page_choices