djangositemapdjango-sitemaps

Django sitemap various links for same model


I created sitemap for my website in Django as below

sitemap

class MyModelSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return MyModel.objects.all()

    def lastmod(self, obj):
        return datetime.datetime.today()

urls.py

sitemaps = {
    'mymodel': MyModelSitemap,
    }

get_absolute_link() is also implemented for MyModel

The problem there are many other URLs that uses MyModel so it's not possible to have only one absolute_link for it.

I need to provide many other URLs to sitemap depending on different queries of MyModel.

How can I achieve this?


Solution

  • The easy way is to create additional sitemaps:

    class MyModelAdditionalLinkSitemap(MyModelSitemap):
        def location(self, obj):
            return obj.get_additional_link()
    

    urls.py

    sitemaps = {
        'mymodel': MyModelSitemap,
        'mymodel2': MyModelAdditionalLinkSitemap
    }
    

    Added:

    I you want to use just one Sitemap class, try something like:

    import itertools
    
    class MyModelSitemap(Sitemap):
        changefreq = "daily"
        priority = 0.5
    
        def items(self):
            product = itertools.product(MyModel.objects.all(), xrange(2))
            return list(product)
    
        def location(self, obj):
            if (obj[1] == 1):
                return obj[0].get_additional_link()
            return obj[0].get_absolute_link()
    
        def lastmod(self, obj):
            return datetime.datetime.today()