2006-09-01 07:13:59 +08:00
|
|
|
from django.http import HttpResponse, Http404
|
|
|
|
from django.template import loader
|
[1.2.X] Fixed #14386, #8960, #10235, #10909, #10608, #13845, #14377 - standardize Site/RequestSite usage in various places.
Many thanks to gabrielhurley for putting most of this together. Also to
bmihelac, arthurk, qingfeng, hvendelbo, petr.pulc@s-cape.cz, Hraban for
reports and some initial patches.
The patch also contains some whitespace/PEP8 fixes.
Backport of [13980] from trunk. Some items could be considered features
(i.e. supporting RequestSite in various contrib apps), others are definite
bugs, but it was much more robust to backport all these tightly related
changes together.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13987 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2010-10-06 04:31:02 +08:00
|
|
|
from django.contrib.sites.models import get_current_site
|
2006-09-01 07:13:59 +08:00
|
|
|
from django.core import urlresolvers
|
Merged Unicode branch into trunk (r4952:5608). This should be fully
backwards compatible for all practical purposes.
Fixed #2391, #2489, #2996, #3322, #3344, #3370, #3406, #3432, #3454, #3492, #3582, #3690, #3878, #3891, #3937, #4039, #4141, #4227, #4286, #4291, #4300, #4452, #4702
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5609 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2007-07-04 20:11:04 +08:00
|
|
|
from django.utils.encoding import smart_str
|
2008-07-26 13:07:16 +08:00
|
|
|
from django.core.paginator import EmptyPage, PageNotAnInteger
|
2006-09-01 07:13:59 +08:00
|
|
|
|
|
|
|
def index(request, sitemaps):
|
[1.2.X] Fixed #14386, #8960, #10235, #10909, #10608, #13845, #14377 - standardize Site/RequestSite usage in various places.
Many thanks to gabrielhurley for putting most of this together. Also to
bmihelac, arthurk, qingfeng, hvendelbo, petr.pulc@s-cape.cz, Hraban for
reports and some initial patches.
The patch also contains some whitespace/PEP8 fixes.
Backport of [13980] from trunk. Some items could be considered features
(i.e. supporting RequestSite in various contrib apps), others are definite
bugs, but it was much more robust to backport all these tightly related
changes together.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13987 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2010-10-06 04:31:02 +08:00
|
|
|
current_site = get_current_site(request)
|
2006-09-01 07:13:59 +08:00
|
|
|
sites = []
|
|
|
|
protocol = request.is_secure() and 'https' or 'http'
|
2008-07-26 13:07:16 +08:00
|
|
|
for section, site in sitemaps.items():
|
[1.2.X] Fixed #14386, #8960, #10235, #10909, #10608, #13845, #14377 - standardize Site/RequestSite usage in various places.
Many thanks to gabrielhurley for putting most of this together. Also to
bmihelac, arthurk, qingfeng, hvendelbo, petr.pulc@s-cape.cz, Hraban for
reports and some initial patches.
The patch also contains some whitespace/PEP8 fixes.
Backport of [13980] from trunk. Some items could be considered features
(i.e. supporting RequestSite in various contrib apps), others are definite
bugs, but it was much more robust to backport all these tightly related
changes together.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13987 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2010-10-06 04:31:02 +08:00
|
|
|
site.request = request
|
2008-07-26 13:07:16 +08:00
|
|
|
if callable(site):
|
|
|
|
pages = site().paginator.num_pages
|
|
|
|
else:
|
|
|
|
pages = site.paginator.num_pages
|
2006-09-03 02:10:00 +08:00
|
|
|
sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap', kwargs={'section': section})
|
2006-09-01 07:13:59 +08:00
|
|
|
sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
|
2008-07-26 13:07:16 +08:00
|
|
|
if pages > 1:
|
|
|
|
for page in range(2, pages+1):
|
|
|
|
sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
|
2006-09-01 07:13:59 +08:00
|
|
|
xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
|
|
|
|
return HttpResponse(xml, mimetype='application/xml')
|
|
|
|
|
|
|
|
def sitemap(request, sitemaps, section=None):
|
|
|
|
maps, urls = [], []
|
|
|
|
if section is not None:
|
2007-04-26 21:30:48 +08:00
|
|
|
if section not in sitemaps:
|
2006-09-01 07:13:59 +08:00
|
|
|
raise Http404("No sitemap available for section: %r" % section)
|
|
|
|
maps.append(sitemaps[section])
|
|
|
|
else:
|
|
|
|
maps = sitemaps.values()
|
2008-07-26 13:07:16 +08:00
|
|
|
page = request.GET.get("p", 1)
|
2010-10-11 22:36:20 +08:00
|
|
|
current_site = get_current_site(request)
|
2006-09-01 07:13:59 +08:00
|
|
|
for site in maps:
|
2008-07-26 13:07:16 +08:00
|
|
|
try:
|
|
|
|
if callable(site):
|
2010-10-11 22:36:20 +08:00
|
|
|
urls.extend(site().get_urls(page=page, site=current_site))
|
2008-07-26 13:07:16 +08:00
|
|
|
else:
|
2010-10-11 22:36:20 +08:00
|
|
|
urls.extend(site.get_urls(page=page, site=current_site))
|
2008-07-26 13:07:16 +08:00
|
|
|
except EmptyPage:
|
|
|
|
raise Http404("Page %s empty" % page)
|
|
|
|
except PageNotAnInteger:
|
|
|
|
raise Http404("No page '%s'" % page)
|
Merged Unicode branch into trunk (r4952:5608). This should be fully
backwards compatible for all practical purposes.
Fixed #2391, #2489, #2996, #3322, #3344, #3370, #3406, #3432, #3454, #3492, #3582, #3690, #3878, #3891, #3937, #4039, #4141, #4227, #4286, #4291, #4300, #4452, #4702
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5609 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2007-07-04 20:11:04 +08:00
|
|
|
xml = smart_str(loader.render_to_string('sitemap.xml', {'urlset': urls}))
|
2006-09-01 07:13:59 +08:00
|
|
|
return HttpResponse(xml, mimetype='application/xml')
|