2014-07-14 79 views
2

我有以下URL配置如何創建Django的網站地圖索引超過50.000網址

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

+0

你弄清楚如何做到這一點到底分頁所有文章分頁網址嗎? –

回答

2

試試這個

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

是的,我知道這一點,但它在文檔中說它在創建索引後處理分頁本身。我不確定我出錯的地方,以及如何創建索引。 – tunaktunak

+0

Doc說:「如果您的一個站點地圖包含超過50,000個網址,則應該創建一個索引文件。在這種情況下,Django會自動對網站地圖進行分頁,並且索引將反映出這一點。' – tunaktunak

+0

在這種情況下,請嘗試在'is_visible'字段的表上添加數據庫索引。你可以用'db_index = True'來做到這一點。國際海事組織,這真的歸結爲數據庫優化。你最終可能會看到你的查詢並嘗試一堆東西來調整它們在數據庫端。 –

0

我已經把極限= 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

+0

這是正確的答案(爲我工作)。請參閱文檔:https://docs.djangoproject.com/en/1.9/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.limit。 – illagrenan