/ / Як створити індекс для файлів Sitemap для django для більш ніж 50.000 URL-адрес - python, django, sitemap, django-sitemaps

Як створити індекс для карток сайту django для більш ніж 50 000 адрес - python, django, sitemap, django-sitemaps

У мене є наступна конфігурація URL-адреси

url(r"^sitemap.xml$", index, {"sitemaps": sitemaps}),
url(r"^sitemap-(?P<section>.+).xml", cache_page(86400)(sitemap), {"sitemaps": sitemaps}),

і файли sitemaps включають наступну карту сайту

 class ArticlesDetailSiteMap(Sitemap):
changefreq = "daily"
priority = 0.9

def items(self):
return Article.objects.filter(is_visible=True, date_published__lte=timezone.now())

але є понад 50 000 статей. Так що я отримую помилку тайм-ауту, коли я намагаюся /sitemap-articles.xml тому що він намагається отримати всі статті.

Будь-які ідеї про те, як створити індекс і зробити тут нумерацію сторінок, як зазначено в документації нижче,

https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/#creating-a-sitemap-index

Відповіді:

2 для відповіді № 1

Спробуйте це

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

І потім

article_list = Article.objects.filter(is_visible=True, date_published__lte=timezone.now())
paginator = Paginator(article_list, 10)
page = request.GET.get("page")


try:
articles = paginator.page(page)
except PageNotAnInteger:
articles = paginator.page(1)
except EmptyPage:
articles = paginator.page(paginator.num_pages)

І ви можете отримати доступ до карти сайту, використовуючи такі URL-адреси sitemap.xml?page=5


0 для відповіді № 2

Я поставив ліміт = 5000 і вирішив проблему.

class ArticlesDetailSiteMap(Sitemap):
changefreq = "daily"
priority = 0.9
limit = 5000

def items(self):
return Article.objects.filter(is_visible=True, date_published__lte=timezone.now())

і він створив URL-адреси для всіх статей, на які поширюється 5000