From a6ca26918bc82586875d547e2aba464e782af343 Mon Sep 17 00:00:00 2001 From: Kalob Taulien Date: Wed, 9 Jun 2021 14:43:57 -0600 Subject: [PATCH 1/3] Added localized URLs for every page through the FoundationMetadataPageMixin --- .../pagemodels/mixin/foundation_metadata.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py b/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py index abc6e7f1313..470c911ba74 100644 --- a/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py +++ b/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py @@ -1,5 +1,7 @@ from taggit.models import Tag +from wagtail.core.models import Page + from wagtailmetadata.models import MetadataPageMixin from wagtail.images.models import Image @@ -76,5 +78,17 @@ def get_admin_display_title(self): return f"({self.locale.language_code}) {title}" return title + def get_sitemap_urls(self, request=None): + sitemap = super().get_sitemap_urls(request) + language_pages = Page.objects.filter(alias_of=self) + for page in language_pages: + sitemap.append( + { + 'location': page.get_full_url(), + 'lastmod': (page.last_published_at or page.latest_revision_created_at), + } + ) + return sitemap + class Meta: abstract = True From d1cdd6ad0c67c4768a5ead85547d164bc2f93c03 Mon Sep 17 00:00:00 2001 From: Kalob Taulien Date: Wed, 9 Jun 2021 16:47:07 -0600 Subject: [PATCH 2/3] Cache sitemap --- network-api/networkapi/urls.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/network-api/networkapi/urls.py b/network-api/networkapi/urls.py index f8660c1b8cc..2b53da05253 100644 --- a/network-api/networkapi/urls.py +++ b/network-api/networkapi/urls.py @@ -4,6 +4,7 @@ from django.conf.urls.static import static from django.contrib import admin from django.http import HttpResponse +from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_exempt from django.views.generic import TemplateView from django.views.generic.base import RedirectView @@ -60,7 +61,7 @@ re_path(r'^cms/', include(wagtailadmin_urls)), re_path(r'^en/cms/', RedirectView.as_view(url='/cms/')), re_path(r'^documents/', include(wagtaildocs_urls)), - re_path(r'^sitemap.xml$', sitemap), + re_path(r'^sitemap.xml$', cache_page(86400)(sitemap)), # Sentry test url path('sentry-debug', lambda r: 1 / 0) if settings.SENTRY_DSN and settings.DEBUG else None, From 7322f2e1e7e6cd04b0509f314324b1f467a8a83f Mon Sep 17 00:00:00 2001 From: Kalob Taulien Date: Mon, 14 Jun 2021 15:57:18 -0600 Subject: [PATCH 3/3] Localized sitemaps --- network-api/networkapi/sitemaps.py | 23 +++++++++++++++++++ network-api/networkapi/urls.py | 5 ++-- .../pagemodels/mixin/foundation_metadata.py | 14 ----------- 3 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 network-api/networkapi/sitemaps.py diff --git a/network-api/networkapi/sitemaps.py b/network-api/networkapi/sitemaps.py new file mode 100644 index 00000000000..eee00f7ea6d --- /dev/null +++ b/network-api/networkapi/sitemaps.py @@ -0,0 +1,23 @@ +# Solution came from Aleksi44 on Github: +# https://github.com/wagtail/wagtail/issues/6583#issuecomment-798960446 +from django.contrib.sitemaps import views as sitemap_views +from wagtail.contrib.sitemaps.sitemap_generator import Sitemap + + +class CustomSitemap(Sitemap): + + def items(self): + return ( + self.get_wagtail_site() + .root_page + .localized # This is missing from sitemap_generator + .get_descendants(inclusive=True) + .live() + .public() + .order_by('path') + .specific()) + + +def sitemap(request, **kwargs): + sitemaps = {'wagtail': CustomSitemap(request)} + return sitemap_views.sitemap(request, sitemaps, **kwargs) diff --git a/network-api/networkapi/urls.py b/network-api/networkapi/urls.py index e04275f482e..da062b8eba4 100644 --- a/network-api/networkapi/urls.py +++ b/network-api/networkapi/urls.py @@ -21,8 +21,8 @@ # from wagtail.core import urls as wagtail_urls from .utility import watail_core_url_override as wagtail_urls +from .sitemaps import sitemap -from wagtail.contrib.sitemaps.views import sitemap from wagtail_footnotes import urls as footnotes_urls from networkapi.wagtailcustomization.image_url_tag_urls import urlpatterns as image_url_tag_urls from networkapi.views import EnvVariablesView, review_app_help_view @@ -61,7 +61,6 @@ re_path(r'^cms/', include(wagtailadmin_urls)), re_path(r'^en/cms/', RedirectView.as_view(url='/cms/')), re_path(r'^documents/', include(wagtaildocs_urls)), - re_path(r'^sitemap.xml$', cache_page(86400)(sitemap)), # Sentry test url path('sentry-debug', lambda r: 1 / 0) if settings.SENTRY_DSN and settings.DEBUG else None, @@ -89,6 +88,8 @@ # wagtail-managed data re_path(r'', include(wagtail_urls)), + + path('sitemap.xml', cache_page(86400)(sitemap)), ) if settings.USE_S3 is not True: diff --git a/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py b/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py index 470c911ba74..abc6e7f1313 100644 --- a/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py +++ b/network-api/networkapi/wagtailpages/pagemodels/mixin/foundation_metadata.py @@ -1,7 +1,5 @@ from taggit.models import Tag -from wagtail.core.models import Page - from wagtailmetadata.models import MetadataPageMixin from wagtail.images.models import Image @@ -78,17 +76,5 @@ def get_admin_display_title(self): return f"({self.locale.language_code}) {title}" return title - def get_sitemap_urls(self, request=None): - sitemap = super().get_sitemap_urls(request) - language_pages = Page.objects.filter(alias_of=self) - for page in language_pages: - sitemap.append( - { - 'location': page.get_full_url(), - 'lastmod': (page.last_published_at or page.latest_revision_created_at), - } - ) - return sitemap - class Meta: abstract = True