/ / Comment créer un index pour les sitemaps django pour plus de 50 000 urls - python, django, sitemap, django-sitemaps

Comment créer un index pour les sitemaps django pour plus de 50 000 urls - python, django, sitemap, django-sitemaps

J'ai la configuration d'URL suivante

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

et les sitemaps incluent le sitemap suivant

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

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

mais il y a plus de 50.000 articles. Donc, je reçois une erreur de timeout quand j'essaie /sitemap-articles.xml parce qu'il essaie d'obtenir tous les articles.

Toutes les idées sur la manière dont je devrais créer un index et faire fonctionner la pagination ici, comme indiqué dans la documentation ci-dessous,

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

Réponses:

2 pour la réponse № 1

Essaye ça

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

Et alors

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)

Et vous pouvez accéder au plan du site en utilisant les URL telles que sitemap.xml?page=5


0 pour la réponse № 2

J'ai mis limite = 5000 et le problème est résolu.

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

et il a créé des urls paginées pour tous les articles paginés par 5000