如何为超过50,000个URL创建Django站点地图索引
我有以下的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条。