From 76ed4184623336078e382f64f4e7440af5263ebf Mon Sep 17 00:00:00 2001 From: jordan Date: Sun, 10 Apr 2011 21:16:46 +0000 Subject: [PATCH] OSQA-561, adding a separate view for the sitemap pages and creating a section index, where all other sitemap locations are included. Now the OSQA Questions Sitemap has a page limit of 250 items per page. When there are less items per page the chance for issues to appear is much smaller. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@961 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/sitemap.py | 32 ++++++++++++++----- .../templates/sitemap_section_index.xml | 6 ++++ forum/urls.py | 5 +-- 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 forum/skins/default/templates/sitemap_section_index.xml diff --git a/forum/sitemap.py b/forum/sitemap.py index edb3220..e225d00 100644 --- a/forum/sitemap.py +++ b/forum/sitemap.py @@ -14,15 +14,31 @@ def index(request, sitemaps): pages = site().paginator.num_pages else: pages = site.paginator.num_pages - sitemap_url = urlresolvers.reverse('forum.sitemap.sitemap', kwargs={'section': section}) + sitemap_url = urlresolvers.reverse('sitemap_section_index', kwargs={'section': section}) sites.append('%s%s' % (settings.APP_URL, sitemap_url)) - if pages > 1: - for page in range(2, pages+1): - sites.append('%s%s?p=%s' % (settings.APP_URL, sitemap_url, page)) + xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites}) return HttpResponse(xml, mimetype='application/xml') -def sitemap(request, sitemaps, section=None): +def sitemap_section_index(request, section, sitemaps): + try: + sitemap = sitemaps[section]() + except KeyError: + raise Http404("Sitemap doesn't exist") + + paginator = sitemap.paginator + + locations = [] + + for page in paginator.page_range: + location = urlresolvers.reverse('sitemap_section_page', kwargs={ 'page' : page, 'section' : section }) + location = '%s%s' % (settings.APP_URL, location) + locations.append(location) + + xml = loader.render_to_string('sitemap_section_index.xml', { 'locations' : locations, }) + return HttpResponse(xml, mimetype='application/xml') + +def sitemap(request, sitemaps, section=None, page=1): maps, urls = [], [] if section is not None: if section not in sitemaps: @@ -30,7 +46,6 @@ def sitemap(request, sitemaps, section=None): maps.append(sitemaps[section]) else: maps = sitemaps.values() - page = request.GET.get("p", 1) for site in maps: try: @@ -46,10 +61,11 @@ def sitemap(request, sitemaps, section=None): return HttpResponse(xml, mimetype='application/xml') class OsqaSitemap(Sitemap): + limit = 250 changefreq = 'daily' priority = 0.5 def items(self): - return Question.objects.filter_state(deleted=False) + return Question.objects.filter_state(deleted=False).order_by('id') def lastmod(self, obj): return obj.last_activity_at @@ -77,4 +93,4 @@ class OsqaSitemap(Sitemap): 'priority': self.__get('priority', item, None) } urls.append(url_info) - return urls \ No newline at end of file + return urls diff --git a/forum/skins/default/templates/sitemap_section_index.xml b/forum/skins/default/templates/sitemap_section_index.xml new file mode 100644 index 0000000..7033375 --- /dev/null +++ b/forum/skins/default/templates/sitemap_section_index.xml @@ -0,0 +1,6 @@ + + +{% for location in locations %} + {{ location }} +{% endfor %} + diff --git a/forum/urls.py b/forum/urls.py index 3e9d19b..d1e87bf 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -27,8 +27,9 @@ core_urls = ( url(r'^$', app.readers.index, name='index'), admin_url, url(r'^sitemap.xml$', 'forum.sitemap.index', {'sitemaps': sitemaps}), - url(r'^sitemap-(?P
.+)\.xml$', 'forum.sitemap.sitemap', {'sitemaps': sitemaps}), - + url(r'^sitemap-(?P
.+)-(?P\d+)\.xml$', 'forum.sitemap.sitemap', {'sitemaps': sitemaps}, name="sitemap_section_page"), + url(r'^sitemap-(?P
.+)\.xml$', 'forum.sitemap.sitemap_section_index', {'sitemaps': sitemaps}, name="sitemap_section_index"), + url(r'^favicon\.ico$', app.meta.favicon), url(r'^cstyle\.css$', app.meta.custom_css, name='custom_css'), -- 2.39.5