I have my development site (localhost.com 'as on the development machine').
This domain has got two subdomains, developer
and blog
.
The url configuration for sitemaps are,
from django.contrib.sitemaps.views import sitemap, index as sitemap_index
url(r'^sitemap\.xml$', sitemap_index, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
url(r'^sitemap-(?P<section>.+)\.xml', sitemap, {'sitemaps': sitemaps}),
when creating sitemaps with sitemap index, The site maps are created as
<sitemap>
<loc>http://localhost.com/sitemap-blog.xml?p=2</loc>
</sitemap>
<sitemap>
<loc>http://localhost.com/sitemap-blog.xml?p=3</loc>
</sitemap>
<sitemap>
<loc>http://localhost.com/sitemap-blog.xml?p=4</loc>
</sitemap>
I want the sitemap on the subdomain, that is blog.example.com
so I overwrote the index
view on django.contrib.sitemap.views
by changing the absolute_url to blog.sitemaps
as follows
from django.contrib.sitemaps.views import x_robots_tag
from django.contrib.sites.shortcuts import get_current_site
from django.core import urlresolvers
from django.template.response import TemplateResponse
@x_robots_tag
def index(request, sitemaps,
template_name='sitemap_index.xml', content_type='application/xml',
sitemap_url_name='django.contrib.sitemaps.views.sitemap'):
req_protocol = request.scheme
req_site = get_current_site(request)
sites = []
for section, site in sitemaps.items():
if callable(site):
site = site()
protocol = req_protocol if site.protocol is None else site.protocol
sitemap_url = urlresolvers.reverse(
sitemap_url_name, kwargs={'section': section})
absolute_url = '%s://blog.%s%s' % (protocol, req_site.domain, sitemap_url)
sites.append(absolute_url)
for page in range(2, site.paginator.num_pages + 1):
sites.append('%s?p=%s' % (absolute_url, page))
return TemplateResponse(request, template_name, {'sitemaps': sites},
content_type=content_type)
So the output the subdomain index is something like this,
<sitemap>
<loc>http://blog.localhost.com/sitemap-whos.xml?p=3</loc>
</sitemap>
<sitemap>
<loc>http://blog.localhost.com/sitemap-whos.xml?p=4</loc>
</sitemap>
What is the correct way to make django sitemap framework to pick up the dynamic subdomains to the sitemap url?
I use django-subdomains
package
For a more general version of All Іѕ Vаиітy answer you can use this for any subdomain you might need: