Django sitemap.xml для миллионов товаров

У нас большое количество товаров. Около 50 миллионов товаров Как лучше всего генерировать карты сайта в Django?

На данный момент мы генерируем их следующим образом:

sitemaps.py

class BookSitemap1(Sitemap):
    protocol = 'https'
    changefreq = 'weekly'
    priority = 0.9

    def items(self):
        return Book.objects.all().order_by('id')[0:25000]

class BookSitemap2(Sitemap):
    protocol = 'https'
    changefreq = 'weekly'
    priority = 0.9

    def items(self):
        return Book.objects.all().order_by('id')[25000:50000]

...

Urls.py

sitemap_books_1 = {'books1': BookSitemap1}
sitemap_books_2 = {'books2': BookSitemap2}

...

path('books-1.xml', sitemap, {'sitemaps': sitemap_books_1}, name='django.contrib.sitemaps.views.sitemap'),
path('books-2.xml', sitemap, {'sitemaps': sitemap_books_2}, name='django.contrib.sitemaps.views.sitemap'),

...

И так далее для всех наших 50 миллионов товаров. Но это 2000 sitemap... Мы можем поместить 50000 урлов в каждый sitemap. Но это снова будет 1000 sitemap

Есть ли другое решение для генерации карты сайта в Django? Потому что это решение очень неудобно для меня

Если вы возвращаете items() как QuerySet, Django будет обрабатывать пагинацию за вас.

class BookSitemap(Sitemap):
protocol = 'https'
changefreq = 'weekly'
priority = 0.9

def items(self):
    return Book.objects.all().order_by('id')

Тогда пусть Django sitemaps.views.index обрабатывает ваш индекс:

path('sitemap.xml', index, {'sitemaps': {'books': BookSitemap}}),
path('sitemap-<section>.xml', sitemap, {'sitemaps': {'books': BookSitemap}}, name='django.contrib.sitemaps.views.sitemap')

Related: Ping google about paginated sitemap django

Вернуться на верх