views.index(request, sitemaps, template_name='sitemap_index.xml', content_type='application/xml', sitemap_url_name='django.contrib.sitemaps.views.sitemap')
The sitemap framework also has the ability to create a sitemap index that references individual sitemap files, one per each section defined in your sitemaps
dictionary. The only differences in usage are:
- You use two views in your URLconf:
django.contrib.sitemaps.views.index()
anddjango.contrib.sitemaps.views.sitemap()
. - The
django.contrib.sitemaps.views.sitemap()
view should take asection
keyword argument.
Here’s what the relevant URLconf lines would look like for the example above:
from django.contrib.sitemaps import views urlpatterns = [ url(r'^sitemap\.xml$', views.index, {'sitemaps': sitemaps}), url(r'^sitemap-(?P<section>.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), ]
This will automatically generate a sitemap.xml
file that references both sitemap-flatpages.xml
and sitemap-blog.xml
. The Sitemap
classes and the sitemaps
dict don’t change at all.
You should create an index file if one of your sitemaps has more than 50,000 URLs. In this case, Django will automatically paginate the sitemap, and the index will reflect that.
If you’re not using the vanilla sitemap view – for example, if it’s wrapped with a caching decorator – you must name your sitemap view and pass sitemap_url_name
to the index view:
from django.contrib.sitemaps import views as sitemaps_views from django.views.decorators.cache import cache_page urlpatterns = [ url(r'^sitemap\.xml$', cache_page(86400)(sitemaps_views.index), {'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}), url(r'^sitemap-(?P<section>.+)\.xml$', cache_page(86400)(sitemaps_views.sitemap), {'sitemaps': sitemaps}, name='sitemaps'), ]
Please login to continue.