Generate Django sitemap while using site framework

552 views Asked by At

I am using sites framework with RequestSite (no SITE_ID set) to generate content based on domain. I need to generate sitemaps for each domain with different results but I didnt find a way how to make this two frameworks work together. Is there any way to get Site of the current request in Sitemap? (getting it from SITE_ID config is not an option for me).

Here is an example of what I would like to do:

from django.contrib.sitemaps import Sitemap
from blog.models import Entry

class BlogSitemap(Sitemap):

    def items(self, request):
        return Entry.objects.filter(is_draft=False, site=request.site)

But its not possible because there is no request in items(). Is there any other way how to filter items in sitemap based on site?

1

There are 1 answers

1
wowkin2 On BEST ANSWER

Try following example:


from django.contrib.sitemaps import Sitemap
from django.contrib.sitemaps.views import sitemap

from blog.models import Entry


class BlogSitemap(Sitemap):
    _cached_site = None

    def items(self):
        return Entry.objects.filter(is_draft=False, site=self._cached_site)

    def get_urls(self, page=1, site=None, protocol=None):
        self._cached_site = site
        return super(BlogSitemap, self).get_urls(page=page, site=site, protocol=protocol)

And in urls.py

urlpatterns = [
    url('sitemap.xml', sitemap, {
        'sitemaps': {'blog': BlogSitemap}
    }, name='django.contrib.sitemaps.views.sitemap'),

    # ...
    # other your urls
]

This should work now. Let me know if you'll have any questions.