2011-01-29 3 views
18

Возможно, я не понимал цели Sitemaps или, может быть, я не понимал, как использовать sitemaps. Сейчас моя карта содержит все «динамически» созданные страницы, такие как сообщения в блоге. Но как добавить «статические» страницы, такие как индекс и страница контактов? Или не должны ли эти взгляды находиться в карте сайта? Я думал, что все страницы должны быть в файле Sitemap. Например, как мне включить такой видDjango Sitemaps и «normal» views

(r'^contact/', include('contact-recaptcha.urls')), 

если нет набора запросов?

Для справки: http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/

Заранее спасибо!

ответ

40

Другой простой альтернативой:

from django.core.urlresolvers import reverse 
from django.contrib.sitemaps import Sitemap 


class ViewSitemap(Sitemap): 
    """Reverse 'static' views for XML sitemap.""" 

    def items(self): 
     # Return list of url names for views to include in sitemap 
     return ['homepage', 'news_article_list', 'contact_page'] 

    def location(self, item): 
     return reverse(item) 


sitemaps = {'views': ViewSitemap} 

Я сознательно пропустил lastmod и changefreq, поскольку определение неверных/предполагаемых данных хуже, чем их включение.

+2

чистый подход, работающий сейчас на моем сайте;) спасибо! – danihp

+1

Не могли бы вы уточнить (добавить ссылку) в разделе «указать неправильные данные хуже»? Поддерживается ли оно любым заявлением от Google? – tutuDajuju

14

Я имею дело с ним таким образом:

абстрактного класса для определения атрибутов статической страницы в.

class AbstractSitemapClass(): 
    changefreq = 'daily' 
    url = None 
    def get_absolute_url(self): 
     return self.url 

карта сайта класс для статических страниц:

class StaticSitemap(Sitemap): 
    pages = { 
      'home':'/', #Add more static pages here like this 'example':'url_of_example', 
      'contact':'/contact/', 
      } 
    main_sitemaps = [] 
    for page in pages.keys(): 
     sitemap_class = AbstractSitemapClass() 
     sitemap_class.url = pages[page]   
     main_sitemaps.append(sitemap_class) 

    def items(self): 
     return self.main_sitemaps  
    lastmod = datetime.datetime(2010, 8, 31) #Enter the year,month, date you want in yout static page sitemap. 
    priority = 1 
    changefreq = "yearly" 

Используйте это в словаре Sitemaps для использования в urls.py:

sitemaps = { 
     'main':StaticSitemap, 
     'flatpages':MyFlatPageSitemap, 
     'model':PostSitemap, 
     }