Django Sitemaps и "обычные" виды
Возможно, я не понял цели Sitemaps или, может быть, я не понимал, как использовать sitemaps. Сейчас моя карта содержит все "динамически" созданные страницы, такие как сообщения в блоге. Но как добавить "статические" страницы, такие как индекс и страница контактов? Или не должны ли эти взгляды находиться в карте сайта? Я думал, что все страницы должны быть в файле Sitemap. Например, как включить такой вид
(r'^contact/', include('contact-recaptcha.urls')),
если нет набора запросов?
Для справки: http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/
Спасибо заранее!
Ответы
Ответ 1
Другая более простая альтернатива:
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
Я имею дело с этим следующим образом:
Абстрактный класс для определения статических атрибутов страницы.
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,
}