Django Sitemaps и "нормальные" просмотры - PullRequest
19 голосов
/ 29 января 2011

Может быть, я не понимал назначение файлов Sitemap или, может быть, я не понимал, как использовать файлы Sitemap.Прямо сейчас моя карта сайта включает в себя все «динамически» созданные страницы, такие как сообщения в блоге.Но как мне добавить «статические» страницы, такие как мой индекс и страница контактов?Или эти представления не должны быть в карте сайта?Я думал, что все страницы должны быть на карте сайта.Например, как бы я включил такое представление

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

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

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

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

Ответы [ 2 ]

42 голосов
/ 16 августа 2011

Еще одна более простая альтернатива:

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, поскольку указание неверных / предполагаемых данных хуже, чем их отсутствие.

14 голосов
/ 30 января 2011

Я справляюсь с этим следующим образом:

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

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

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

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,
        }
...