from datetime import date, datetime from django.conf.urls.i18n import i18n_patterns from django.contrib.sitemaps import GenericSitemap, Sitemap, views from django.http import HttpResponse from django.urls import path from django.utils import timezone from django.views.decorators.cache import cache_page from ..models import I18nTestModel, TestModel class SimpleSitemap(Sitemap): changefreq = "never" priority = 0.5 location = '/location/' lastmod = datetime.now() def items(self): return [object()] class SimplePagedSitemap(Sitemap): def items(self): return [object() for x in range(Sitemap.limit + 1)] class SimpleI18nSitemap(Sitemap): changefreq = "never" priority = 0.5 i18n = True def items(self): return I18nTestModel.objects.order_by('pk').all() class AlternatesI18nSitemap(SimpleI18nSitemap): alternates = True class LimitedI18nSitemap(AlternatesI18nSitemap): languages = ['en', 'es'] class XDefaultI18nSitemap(AlternatesI18nSitemap): x_default = True class EmptySitemap(Sitemap): changefreq = "never" priority = 0.5 location = '/location/' class FixedLastmodSitemap(SimpleSitemap): lastmod = datetime(2013, 3, 13, 10, 0, 0) class FixedLastmodMixedSitemap(Sitemap): changefreq = "never" priority = 0.5 location = '/location/' loop = 0 def items(self): o1 = TestModel() o1.lastmod = datetime(2013, 3, 13, 10, 0, 0) o2 = TestModel() return [o1, o2] class FixedNewerLastmodSitemap(SimpleSitemap): lastmod = datetime(2013, 4, 20, 5, 0, 0) class DateSiteMap(SimpleSitemap): lastmod = date(2013, 3, 13) class TimezoneSiteMap(SimpleSitemap): lastmod = datetime(2013, 3, 13, 10, 0, 0, tzinfo=timezone.get_fixed_timezone(-300)) def testmodelview(request, id): return HttpResponse() simple_sitemaps = { 'simple': SimpleSitemap, } simple_i18n_sitemaps = { 'i18n': SimpleI18nSitemap, } alternates_i18n_sitemaps = { 'i18n-alternates': AlternatesI18nSitemap, } limited_i18n_sitemaps = { 'i18n-limited': LimitedI18nSitemap, } xdefault_i18n_sitemaps = { 'i18n-xdefault': XDefaultI18nSitemap, } simple_sitemaps_not_callable = { 'simple': SimpleSitemap(), } simple_sitemaps_paged = { 'simple': SimplePagedSitemap, } empty_sitemaps = { 'empty': EmptySitemap, } fixed_lastmod_sitemaps = { 'fixed-lastmod': FixedLastmodSitemap, } fixed_lastmod_mixed_sitemaps = { 'fixed-lastmod-mixed': FixedLastmodMixedSitemap, } sitemaps_lastmod_mixed_ascending = { 'no-lastmod': EmptySitemap, 'lastmod': FixedLastmodSitemap, } sitemaps_lastmod_mixed_descending = { 'lastmod': FixedLastmodSitemap, 'no-lastmod': EmptySitemap, } sitemaps_lastmod_ascending = { 'date': DateSiteMap, 'datetime': FixedLastmodSitemap, 'datetime-newer': FixedNewerLastmodSitemap, } sitemaps_lastmod_descending = { 'datetime-newer': FixedNewerLastmodSitemap, 'datetime': FixedLastmodSitemap, 'date': DateSiteMap, } generic_sitemaps = { 'generic': GenericSitemap({'queryset': TestModel.objects.order_by('pk').all()}), } generic_sitemaps_lastmod = { 'generic': GenericSitemap({ 'queryset': TestModel.objects.order_by('pk').all(), 'date_field': 'lastmod', }), } urlpatterns = [ path('simple/index.xml', views.index, {'sitemaps': simple_sitemaps}), path('simple-paged/index.xml', views.index, {'sitemaps': simple_sitemaps_paged}), path('simple-not-callable/index.xml', views.index, {'sitemaps': simple_sitemaps_not_callable}), path( 'simple/custom-index.xml', views.index, {'sitemaps': simple_sitemaps, 'template_name': 'custom_sitemap_index.xml'}), path( 'simple/sitemap-
.xml', views.sitemap, {'sitemaps': simple_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'simple/sitemap.xml', views.sitemap, {'sitemaps': simple_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'simple/i18n.xml', views.sitemap, {'sitemaps': simple_i18n_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'alternates/i18n.xml', views.sitemap, {'sitemaps': alternates_i18n_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'limited/i18n.xml', views.sitemap, {'sitemaps': limited_i18n_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'x-default/i18n.xml', views.sitemap, {'sitemaps': xdefault_i18n_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'simple/custom-sitemap.xml', views.sitemap, {'sitemaps': simple_sitemaps, 'template_name': 'custom_sitemap.xml'}, name='django.contrib.sitemaps.views.sitemap'), path( 'empty/sitemap.xml', views.sitemap, {'sitemaps': empty_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod/sitemap.xml', views.sitemap, {'sitemaps': fixed_lastmod_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod-mixed/sitemap.xml', views.sitemap, {'sitemaps': fixed_lastmod_mixed_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod/date-sitemap.xml', views.sitemap, {'sitemaps': {'date-sitemap': DateSiteMap}}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod/tz-sitemap.xml', views.sitemap, {'sitemaps': {'tz-sitemap': TimezoneSiteMap}}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod-sitemaps/mixed-ascending.xml', views.sitemap, {'sitemaps': sitemaps_lastmod_mixed_ascending}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod-sitemaps/mixed-descending.xml', views.sitemap, {'sitemaps': sitemaps_lastmod_mixed_descending}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod-sitemaps/ascending.xml', views.sitemap, {'sitemaps': sitemaps_lastmod_ascending}, name='django.contrib.sitemaps.views.sitemap'), path( 'lastmod-sitemaps/descending.xml', views.sitemap, {'sitemaps': sitemaps_lastmod_descending}, name='django.contrib.sitemaps.views.sitemap'), path( 'generic/sitemap.xml', views.sitemap, {'sitemaps': generic_sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path( 'generic-lastmod/sitemap.xml', views.sitemap, {'sitemaps': generic_sitemaps_lastmod}, name='django.contrib.sitemaps.views.sitemap'), path( 'cached/index.xml', cache_page(1)(views.index), {'sitemaps': simple_sitemaps, 'sitemap_url_name': 'cached_sitemap'}), path( 'cached/sitemap-
.xml', cache_page(1)(views.sitemap), {'sitemaps': simple_sitemaps}, name='cached_sitemap'), path( 'sitemap-without-entries/sitemap.xml', views.sitemap, {'sitemaps': {}}, name='django.contrib.sitemaps.views.sitemap'), ] urlpatterns += i18n_patterns( path('i18n/testmodel//', testmodelview, name='i18n_testmodel'), )