1 from django
.core
import urlresolvers
4 PING_URL
= "http://www.google.com/webmasters/sitemaps/ping"
6 class SitemapNotFound(Exception):
9 def ping_google(sitemap_url
=None, ping_url
=PING_URL
):
11 Alerts Google that the sitemap for the current site has been updated.
12 If sitemap_url is provided, it should be an absolute path to the sitemap
13 for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this
14 function will attempt to deduce it by using urlresolvers.reverse().
16 if sitemap_url
is None:
18 # First, try to get the "index" sitemap URL.
19 sitemap_url
= urlresolvers
.reverse('django.contrib.sitemaps.views.index')
20 except urlresolvers
.NoReverseMatch
:
22 # Next, try for the "global" sitemap URL.
23 sitemap_url
= urlresolvers
.reverse('django.contrib.sitemaps.views.sitemap')
24 except urlresolvers
.NoReverseMatch
:
27 if sitemap_url
is None:
28 raise SitemapNotFound("You didn't provide a sitemap_url, and the sitemap URL couldn't be auto-detected.")
30 from django
.contrib
.sites
.models
import Site
31 current_site
= Site
.objects
.get_current()
32 url
= "%s%s" % (current_site
.domain
, sitemap_url
)
33 params
= urllib
.urlencode({'sitemap':url
})
34 urllib
.urlopen("%s?%s" % (ping_url
, params
))
37 def __get(self
, name
, obj
, default
=None):
39 attr
= getattr(self
, name
)
40 except AttributeError:
49 def location(self
, obj
):
50 return obj
.get_absolute_url()
53 from django
.contrib
.sites
.models
import Site
54 current_site
= Site
.objects
.get_current()
56 for item
in self
.items():
57 loc
= "http://%s%s" % (current_site
.domain
, self
.__get
('location', item
))
60 'lastmod': self
.__get
('lastmod', item
, None),
61 'changefreq': self
.__get
('changefreq', item
, None),
62 'priority': self
.__get
('priority', item
, None)
67 class FlatPageSitemap(Sitemap
):
69 from django
.contrib
.sites
.models
import Site
70 current_site
= Site
.objects
.get_current()
71 return current_site
.flatpage_set
.all()
73 class GenericSitemap(Sitemap
):
77 def __init__(self
, info_dict
, priority
=None, changefreq
=None):
78 self
.queryset
= info_dict
['queryset']
79 self
.date_field
= info_dict
.get('date_field', None)
80 self
.priority
= priority
81 self
.changefreq
= changefreq
84 # Make sure to return a clone; we don't want premature evaluation.
85 return self
.queryset
.filter()
87 def lastmod(self
, item
):
88 if self
.date_field
is not None:
89 return getattr(item
, self
.date_field
)