Commit 4d8af2fa authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.2.X] Fixed #14198 -- Corrected rendering of generic sitemaps when no...

[1.2.X] Fixed #14198 -- Corrected rendering of generic sitemaps when no priority is specified. Thanks to palkeo for the report.

Backport of r13676 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13677 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 5295d678
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -65,11 +65,12 @@ class Sitemap(object):
        urls = []
        for item in self.paginator.page(page).object_list:
            loc = "http://%s%s" % (current_site.domain, self.__get('location', item))
            priority = self.__get('priority', item, None)
            url_info = {
                'location':   loc,
                'lastmod':    self.__get('lastmod', item, None),
                'changefreq': self.__get('changefreq', item, None),
                'priority':   str(self.__get('priority', item, ''))
                'priority':   str(priority is not None and priority or '')
            }
            urls.append(url_info)
        return urls
+17 −3
Original line number Diff line number Diff line
from datetime import date
from django.conf import settings
from django.contrib.auth.models import User
from django.test import TestCase
from django.utils.formats import localize
from django.utils.translation import activate
@@ -10,6 +11,8 @@ class SitemapTests(TestCase):

    def setUp(self):
        self.old_USE_L10N = settings.USE_L10N
        # Create a user that will double as sitemap content
        User.objects.create_user('testuser', 'test@example.com', 's3krit')

    def tearDown(self):
        settings.USE_L10N = self.old_USE_L10N
@@ -17,11 +20,11 @@ class SitemapTests(TestCase):
    def test_simple_sitemap(self):
        "A simple sitemap can be rendered"
        # Retrieve the sitemap.
        response = self.client.get('/sitemaps/sitemap.xml')
        response = self.client.get('/simple/sitemap.xml')
        # Check for all the important bits:
        self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://example.com/ticket14164</loc><lastmod>%s</lastmod><changefreq>never</changefreq><priority>0.5</priority></url>
<url><loc>http://example.com/location/</loc><lastmod>%s</lastmod><changefreq>never</changefreq><priority>0.5</priority></url>
</urlset>
""" % date.today().strftime('%Y-%m-%d'))

@@ -34,6 +37,17 @@ class SitemapTests(TestCase):

        # Retrieve the sitemap. Check that priorities
        # haven't been rendered in localized format
        response = self.client.get('/sitemaps/sitemap.xml')
        response = self.client.get('/simple/sitemap.xml')
        self.assertContains(response, '<priority>0.5</priority>')
        self.assertContains(response, '<lastmod>%s</lastmod>' % date.today().strftime('%Y-%m-%d'))

    def test_generic_sitemap(self):
        "A minimal generic sitemap can be rendered"
        # Retrieve the sitemap.
        response = self.client.get('/generic/sitemap.xml')
        # Check for all the important bits:
        self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://example.com/users/testuser/</loc></url>
</urlset>
""")
+12 −4
Original line number Diff line number Diff line
from datetime import datetime
from django.conf.urls.defaults import *
from django.contrib.sitemaps import Sitemap
from django.contrib.sitemaps import Sitemap, GenericSitemap
from django.contrib.auth.models import User

class SimpleSitemap(Sitemap):
    changefreq = "never"
    priority = 0.5
    location = '/ticket14164'
    location = '/location/'
    lastmod = datetime.now()

    def items(self):
        return [object()]

sitemaps = {
simple_sitemaps = {
    'simple': SimpleSitemap,
}

generic_sitemaps = {
    'generic': GenericSitemap({
        'queryset': User.objects.all()
    }),
}

urlpatterns = patterns('django.contrib.sitemaps.views',
    (r'^sitemaps/sitemap\.xml$', 'sitemap', {'sitemaps': sitemaps}),
    (r'^simple/sitemap\.xml$', 'sitemap', {'sitemaps': simple_sitemaps}),
    (r'^generic/sitemap\.xml$', 'sitemap', {'sitemaps': generic_sitemaps}),
)