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')