如何为超过50,000个URL创建Django站点地图索引

6 投票
2 回答
1812 浏览
提问于 2025-04-18 13:17

我有以下的URL配置

url(r'^sitemap\.xml$', index, {'sitemaps': sitemaps}),
url(r'^sitemap-(?P<section>.+)\.xml', cache_page(86400)(sitemap), {'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 个回答

3

试试这个

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)

你可以通过像 sitemap\.xml?page=5 这样的链接来访问网站地图

6

我设置了限制为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())

这样就为所有文章创建了分页的链接,每页显示5000条。

撰写回答