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 1c4abdf855b..da062b8eba4 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 @@ -20,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 @@ -60,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$', sitemap), # Sentry test url path('sentry-debug', lambda r: 1 / 0) if settings.SENTRY_DSN and settings.DEBUG else None, @@ -88,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: